Rod*_*ddy 17 uiviewcontroller ios
子视图控制器的实现中的以下代码删除了子视图控制器:
- (void)commandFinishVC
{
[ self.view removeFromSuperview];
[ self removeFromParentViewController ];
}
Run Code Online (Sandbox Code Playgroud)
子视图控制器及其视图已成功删除,但父母如何通知此情况?-viewDidDisappear未被调用,并且已弃用-viewDidUnload.
从我可以找到的例子中,总是假设父视图控制器是提名被删除的孩子的事件的发起者,但是(对我来说)孩子应该在其完成的逻辑中是自主的.
是否应该通过利用self.parentViewController属性并在父视图控制器中使用类似以下内容来调用remove方法?
- (void)commandFinishVC
{
[ childVC.view removeFromSuperview];
[ childVC removeFromParentViewController ];
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 25
是的,您的父控制器通常应该控制子控制器的添加和删除,因此您的第二种方法似乎更适用.请参阅UIViewController类参考的实现容器视图控制器部分.
我怀疑你可以逃脱你以前的方法,孩子正在移除自己,但Apple的文档是一致的,WWDC 2011 实施UIViewController Containment会议说容器控制器负责管理孩子.
因此,在回答您关于孩子如何通知父母已被删除的问题时,没有建立的协议.但这并不令人惊讶,因为假设父母将启动这一过程.如果孩子需要启动此过程,文档建议父母应该有一个用于管理子控制器的公共API.
因此,虽然没有儿童通知父母的协议,但是有一个已发布的API,父控制器通过该API告知儿童他们已被移动/移除.具体来说,当父控制器正在删除子节点时,它应该调用willMoveToParentViewController.该文档明确说明我们必须执行此通知:
如果要实现自己的容器视图控制器,则必须
willMoveToParentViewController:在调用removeFromParentViewController方法之前调用子视图控制器的方法...
因此,如" View Controller编程指南"的" 添加和删除子节"部分所述,在删除子节点时,我们应该:
[childVC willMoveToParentViewController:nil];
[childVC.view removeFromSuperview];
[childVC removeFromParentViewController];
Run Code Online (Sandbox Code Playgroud)
不出所料,文档didMoveToParentViewController同样明确:当您添加子控制器时,必须didMoveToParentViewController在动画/转换(如果有)完成时调用.我不知道如果我们不调用这两种通知方法会发生什么,但Apple说我们必须这样做,因此这样做似乎是谨慎的.
| 归档时间: |
|
| 查看次数: |
10676 次 |
| 最近记录: |