首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >视图控制器容器在iOS 5中是如何工作的?

视图控制器容器在iOS 5中是如何工作的?
EN

Stack Overflow用户
提问于 2011-12-05 08:30:24
回答 2查看 53.5K关注 0票数 108

在WWDC2011 Session 102中,苹果引入了View Controller Containment,这是一种创建自定义视图控制器容器的能力,类似于UITabBarControllerUINavigationController等。

我看了几遍这些例子。与此模式相关的方法有很多,但要准确地弄清楚它们有点困难。我将在这里发布我认为正在发生的事情,看看社区是否会证实或不证实我的怀疑。

场景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

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8379759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档