在2011年WWDC会话102,苹果推出视图控制器遏制,这是创建定制的视图控制器容器的能力,类似于UITabBarController,UINavigationController和类似物。我看了几次例子。有很多与此模式相关的方法,但是要准确地找出它们有点困难。我将在这里发布我的想法,看看社区是否会证实或怀疑我的怀疑。方案1:从无父视图移到新的父视图控制器[vc willMoveToParentViewController:self];[self addChildViewController:vc];[self.view addSubview:vc.view]; // or something like this.[vc didMoveToParentViewController:self];前两行是否必须按照给定的顺序出现,或者可以颠倒吗?方案2:从父视图控制器移动到无父视图控制器[vc willMoveToParentViewController:nil];[vc.view removeFromSuperview];[vc removeFromParentViewController];也有必要打电话[vc didMoveToParentViewController:nil]吗?在这种情况下,Session 102中的示例没有这样做,但是我不知道这是否是遗漏。方案3:从一个父视图控制器移动到另一个这很可能会以以下方式发生,因为每个父视图控制器中的逻辑都将被封装。// In the old parent[vc willMoveToParentViewController:nil];[vc.view removeFromSuperview];[vc removeFromParentViewController];// In the new parent[vc willMoveToParentViewController:self];[self addChildViewController:vc];[self.view addSubview:vc.view];[vc didMoveToParentViewController:self];问题我的主要问题是:通常,这是视图控制器包含区的工作方式吗?上面给出的机制正确吗?打电话willMoveToParentViewController之前有必要打电话addChildViewController吗?在我看来,这似乎是合乎逻辑的顺序,但这是否绝对必要?打电话didMoveToParentViewController:nil后有必要打电话removeFromParentViewController吗?
3 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
该UIViewController文档很清楚何时以及何时不调用willMove/ didMove方法。查阅“实施Container View Controller”文档。
文档说,如果不重写addChildViewController,则不必调用 willMoveToParentViewController:method。但是,您确实需要didMoveToParentViewController:在转换完成后调用该方法。“同样,容器视图控制器有责任在调用willMoveToParentViewController:方法之前先调用该removeFromParentViewController方法。该removeFromParentViewController方法将调用didMoveToParentViewController:子视图控制器的方法。”
此外,还有制定了一个例子在这里和示例代码在这里。
祝好运
眼眸繁星
TA贡献1873条经验 获得超9个赞
注意:如果您要移动的项目是具有被覆盖的自定义类(除非您的覆盖在内部对其进行了调用),您确实需要在致电willMoveToParentViewController
之前addChildViewController
addChildViewController
- 3 回答
- 0 关注
- 620 浏览
添加回答
举报
0/150
提交
取消