在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
吗?
addChildViewController
应该是平衡的didMoveToParentViewController
,并willMoveToParentViewController
应保持平衡removeFromParentViewController
。这正是我想要的。不知道我怎么在文档中错过了它。