(四十五)Modal 模态窗口 -遮盖
任何控制器都能通过Modal方式切换。
Modal的默认效果是:新显示的控制器从屏幕底部向上,直到盖住之前的控制器为止。
假设有One和Two两个控制器:
One到Two的Modal方法:present...方法。
TwoViewController *two = [[TwoViewController alloc] init]; [self presentViewController:two animated:YES completion:^{ NSLog(@"展示完毕"); }];
Two返回One的方法:dismiss...方法。
[self dismissViewControllerAnimated:YES completion:^{ NSLog(@"关闭结束"); }];
Modal实现原理:
当Two覆盖One时,One会被移开,当Two退出时,One再拿回来,不变的是根控制器。
One通过presentedViewController引用Two,Two通过presentingViewController引用One。
给一个控制器添加导航控制器的最快方法是直接给这个控制器包装一个导航控制器,也就是将导航控制器的rootViewController设置为当前控制器:
TwoViewController *two = [[TwoViewController alloc] init]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:two];
一个细节:给Two包装了NavigationController后,销毁Two直接调用Two的dismiss...方法即可销毁连带导航控制器。
调用导航控制器的子控制器也可以销毁连带导航控制器在内的控制器。
一般用push,很少用Modal。独立界面用Modal。
如果用storyboard,直接拖线选择Modal方式即可。
Tip:使用prepareForSegue...方法可以捕捉跳转时机,传递数据。
Tip:使用navigation的topViewController方法可以获取栈顶控制器: