在WWDC 2011 Session 102中,Apple推出了View Controller Containment,它可以创建自定义视图控制器容器,类似于UITabBarController
,UINavigationController
等。View Controller Containment如何在iOS 5中工作?
我多次看过这些例子。这种模式有许多相关的方法,但要弄清楚它们有点困难。我将在此发布我认为正在发生的事情,看看社区是否会证实或否认我的怀疑。
方案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]
?在这种情况下,会话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];
问题
我的主要问题是:这是视图控制器围堵应该如何工作的,有什么看法?上面给出的机制是否正确?
在致电addChildViewController
之前是否需要致电willMoveToParentViewController
?这对我来说似乎是合乎逻辑的顺序,但这是否绝对必要?
调用removeFromParentViewController
后是否需要拨打didMoveToParentViewController:nil
?
问题是,当我试图添加ios5标签时,我不小心打了一个回车,即使我没有完成编辑/编辑它,也添加了帖子。我试图删除它,但后来发现我只能*投票*删除它。 –