2

我有一个父视图控制器。

parentViewController 有 3 个孩子。

AnnController、BobController、CharlieController

(不是真实姓名)

任何时候都可能只存在一个这样的控制器的视图。过渡通过以下方式完成:

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

一切正常。

但是,将 Ann、Bob 和 Charlie 添加为 Parent 的孩子有什么意义呢?

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

但不管 viewController 是否是孩子,它都会被调用。

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

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

那么 Ann、Bob 和 Charlie 是 Parent Controller 的孩子这一事实到底是做什么的呢?

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

实际上,事实是什么

注意:我很清楚视图遏制是什么意思。我问具体是做什么的?例如,其中一个答案说它通过旋转传递。是的。但它是否适用于所有孩子或唯一的孩子,其视图位于 parentViewController.view 层次结构中?或者是什么?

4

1 回答 1

2

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

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

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

像您提到的调用(viewWillAppear, viewWillDisappear)这样的视图周期是由视图控制器管理的,所以它是一个不同的故事。

查看官方文档以更好地了解自定义容器控制器的强大功能。

于 2012-10-24T08:18:16.300 回答