modal出来一个控制器的浅析

// modal出来一个控制器
- (IBAction)modal:(id)sender {
    
    //一但控制器被销毁,它里面业务逻辑就不能够处理
    TwoViewController *twoVC = [[TwoViewController alloc] init];
    
    // modal出来的控制器View添加到窗口上面
    // 把窗口的根控制器的view移除
    // self.presentedViewController强引用modal出来的控制器.
    // 窗口的根控制器没有改变
    NSLog(@"1-----%@",self.presentedViewController); // null

    [self presentViewController:twoVC animated:YES completion:^{
        
        NSLog(@"2-----%@",[UIApplication sharedApplication].keyWindow.rootViewController); //       A
        
    }];
    
    // A Modal 出来 B
    // 那么 self.presentedViewController === B
    NSLog(@"3-----%@",self.presentedViewController); //      B
    NSLog(@"4-----%@", self); //        A
}

// A --modal--> B
// A.presentedViewController == B
// B.presentingViewController == A
// 如果想利用一个A控制器弹出另外一个B控制器
// A控制器的条件是A的view得在window上

- (void)addClick{

    LZAddTagViewController *addTag = [[LZAddTagViewController alloc] init];
    LZNavigationController *nav = [[LZNavigationController alloc] initWithRootViewController:addTag];

    // 拿到"窗口根控制器"曾经modal出来的“发表文字”所在的导航控制器
    // 现在我们要通过窗口根控制器拿到B
    [self.window.rootViewController.presentedViewController presentViewController:nav animated:YES completion:nil];
}


你可能感兴趣的:(modal出来一个控制器的浅析)