// 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); // <ViewController: 0x7ff1fbf3eab0> A
}];
// A Modal 出来 B
// 那么 self.presentedViewController === B
NSLog(@"3-----%@",self.presentedViewController); // <TwoViewController: 0x7ff1fbe18740> B
NSLog(@"4-----%@", self); // <ViewController: 0x7ff1fbf3eab0> 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];
}
网友评论