考虑UIViewController
,其视图包含另一个UIViewController
的视图。
说父UIViewController
负责调用子控制器的生命周期方法是否正确?方法如:
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewWillDisappear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
例如:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[_childViewController viewWillAppear:animated];
}
如果是这样,必须调用哪些方法?
有更好的方法吗?显然,上述方法不是向前兼容的:如果添加了新的生命周期方法,则需要修改父类以传播新方法的调用。
或者嵌套视图控制器只是一个坏主意,应该避免吗?
答案 0 :(得分:2)
执行此操作的正确方法是将视图控制器添加为子视图控制器。您需要同时维护视图层次结构(将视图添加为子视图)和视图控制器层次结构(将视图控制器添加为子视图)。然后为您调用所有生命周期方法。
相关方法为addChildViewController:
和didMoveToParentViewController:
。
在WWDC 2011上有关于视图控制器遏制的讨论,我建议观看视频。
答案 1 :(得分:0)
如果你想创建一个仍然支持iOS 4的层次结构,你确实需要转发addChildViewController文档中详述的消息:你自己。
如果iOS 4不是针对性的,你只需要为ios 5及更高版本构建,就像jrturton所说的那样坚持使用新的API。