在iOS中嵌套UIViewControllers

时间:2012-11-16 19:43:53

标签: iphone ios uiviewcontroller

考虑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];
}

如果是这样,必须调用哪些方法?

有更好的方法吗?显然,上述方法不是向前兼容的:如果添加了新的生命周期方法,则需要修改父类以传播新方法的调用。

或者嵌套视图控制器只是一个坏主意,应该避免吗?

2 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是将视图控制器添加为子视图控制器。您需要同时维护视图层次结构(将视图添加为子视图)和视图控制器层次结构(将视图控制器添加为子视图)。然后为您调用所有生命周期方法。

相关方法为addChildViewController:didMoveToParentViewController:

在WWDC 2011上有关于视图控制器遏制的讨论,我建议观看视频。

答案 1 :(得分:0)

如果你想创建一个仍然支持iOS 4的层次结构,你确实需要转发addChildViewController文档中详述的消息:你自己。

如果iOS 4不是针对性的,你只需要为ios 5及更高版本构建,就像jrturton所说的那样坚持使用新的API。