添加childViewController究竟有什么意义?

时间:2012-10-24 08:03:31

标签: objective-c xcode uiviewcontroller

我有一个parentViewController。

parentViewController有3个孩子。

AnnController, BobController, CharlieController

(不是真名)

任何时候都只能存在一个这样的控制器的视图。转换完成:

[self transitionFromViewController:fromController toViewController:toViewController duration:duration options:options animations:animations completion:^(BOOL finished)

一切都运作良好。

但是,当安,鲍勃和查理成为父母的孩子时,有什么意义呢?

起初我以为在transitionFromViewController期间会自动调用viewWillAppear和viewWillDisappear

但无论如何,无论viewController是否是孩子,都会调用它。

当父母被调用时,可能会调用viewWillAppear和viewWillDisappear。但这很容易做到。

当然,只有实际在ParentController.view的视图层次结构中的视图才会调用它们的viewWillAppear和viewWillDisappear吗?或者是吗?

那么,Ann,Bob和Charlie是父母控制者的孩子的事实究竟是什么呢?

在Parent的viewWillAppear中,它是否会遍历它的所有子节点并调用它们的viewWillAppear当且仅当childController的视图是层次结构的一部分时?或者是什么?

实际上是什么

注意:我很清楚视图包含的含义。我问它到底是做什么的?例如,其中一个答案说它传递了旋转。是。但它是否适用于所有子视图或仅视图位于parentViewController.view层次结构中的子视图?或者是什么?

1 个答案:

答案 0 :(得分:2)

简短的Anwwer: 添加childViewController允许您将视图控制器中的事件重定向到已定义的其他控制器具有其子控件。

长答案: addChildViewControlleriOS 5及以后的一部分。这是一个名为“view controller containment”的功能。这背后的基本思想是您可以将视图控制器嵌入到您自己的其他视图控制器中。它功能强大,因为它允许您编写自己的tabViewControllercustomNavigationController,例如。

关于View controller containment的主要问题是它试图确保所有包含的视图控制器都能获得适当的消息。旋转设备的一个简单示例是,如果未添加addChildViewController,则旋转更改事件将不会传递到视图层次结构。

您提到的调用(viewWillAppear, viewWillDisappear)之类的视图周期由视图控制器管理,因此它是一个不同的故事。

了解官方doc,以便更好地了解自定义容器控制器的强大功能。