我有一个parentViewController。
parentViewController 有 3 个子级。
安 Controller , 鲍勃 Controller , 查理 Controller
(非真实姓名)
任何时候都只能存在一个这样的 Controller 的 View 。转换完成:
[self transitionFromViewController:fromController toViewController:toViewController duration:duration options:options animations:animations completion:^(BOOL finished)
一切正常。
但是添加 Ann、Bob 和 Charlie 作为 Parent 的子项有什么意义呢?
起初我以为是这样,viewWillAppear 和 viewWillDisappear 在transitionFromViewController期间被自动调用
但是无论 viewController 是否是 subview ,它都会被调用。
可能是这样,当 parent 被调用时,viewWillAppear 和 viewWillDisappear 也被调用。但这很容易做到。
当然,只有实际上位于 ParentController.view 的 View 层次结构中的 View 才会调用其 viewWillAppear 和 viewWillDisappear 对吗?或者是吗?
那么 Ann、Bob 和 Charlie 是 Parent Controller 的 child 这一事实究竟意味着什么呢?
在父级的 viewWillAppear 中,当且仅当 childController 的 View 是层次结构的一部分时,它会遍历所有子级并调用它们的 viewWillAppear 吗?或者什么?
事实上,这个事实是什么
注意:我很清楚 View 包含的含义。我问它具体是做什么的?例如,其中一个答案说它会轮换传递。是的。但它是否对所有 subview 或唯一 View 位于parentViewController.view 层次结构中的 subview 执行此操作?或者什么?
最佳答案
简短回答:
添加 childViewController
允许您将 View Controller 中的事件重定向到已定义的具有其子级的其他 Controller 。
长答案:
addChildViewController
是 iOS 5
及更高版本的一部分。这是一个称为“ View Controller 包含
”的功能。这背后的基本思想是您可以将 View Controller 嵌入到您自己的其他 View Controller 中。它很强大,因为它允许您编写自己的 tabViewController
或 customNavigationController
例如
关于 View Controller 包含的主要事情是它尝试确保所有包含的 View Controller 都会收到适当的消息。一个简单的例子是,当您旋转设备时,如果您没有添加 addChildViewController
,旋转更改事件将不会传递到您的 View 层次结构。
像您提到的调用(viewWillAppear,viewWillDisappear
)这样的 View 周期是由 View Controller 管理的,所以这是一个不同的故事。
查看官方doc更好地了解自定义容器 Controller 的强大功能。
关于objective-c - 添加childViewController到底有什么意义呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045090/