0.3.5.多控制器
当app中有多个控制器的时候,我们就需要对这些控制器进行管理
有多个view时,可以用一个大的view去管理1个或者多个小view
控制器也是如此,用1个控制器去管理其他多个控制器
- 比如,用一个控制器A去管理3个控制器B、C、D
- 控制器A被称为控制器B、C、D的“父控制器”
- 控制器B、C、D的被称为控制器A的“子控制器”
- 为了便于管理控制器,iOS提供了2个比较特殊的控制器
UINavigationController
UITabBarController
注意点
控制器之间传值:一定要注意控制器的子控件有没有加载,一定要在子控件加载完成的时候才去给子控件赋值,一般在viewDidLoad给控件赋值。
控制器的数据传递
控制器之间的数据传递主要有2种情况:顺传和逆传
顺传
控制器的跳转方向: A > B
数据的传递方向 : A > B
数据的传递方式 : 在A的prepareForSegue:sender:方法中根据segue参数取得destinationViewController, 也就是控制器B, 直接给控制器B传递数据
(要在B的viewDidLoad方法中取得数据,来赋值给界面上的UI控件)
逆传
控制器的跳转方向: B > A
数据的传递方向 : B > A
数据的传递方式 : 让A成为B的代理, 在B中调用A的代理方法,通过代理方法的参数传递数据给A
Modal的跳转方式
除了push之外,还有另外一种控制器的切换方式,那就是Modal
任何控制器(只要是继承自UIViewController)都能通过Modal的形式展示出来
Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止
以Modal的形式展示控制器
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion
关闭当初Modal出来的控制器
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;