为了账号安全,请及时绑定邮箱和手机立即绑定

View Controller Containment如何在iOS 5中工作?

View Controller Containment如何在iOS 5中工作?

iOS
蝴蝶不菲 2019-10-24 13:52:58
在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 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

该UIViewController文档很清楚何时以及何时不调用willMove/ didMove方法。查阅“实施Container View Controller”文档。


文档说,如果不重写addChildViewController,则不必调用 willMoveToParentViewController:method。但是,您确实需要didMoveToParentViewController:在转换完成后调用该方法。“同样,容器视图控制器有责任在调用willMoveToParentViewController:方法之前先调用该removeFromParentViewController方法。该removeFromParentViewController方法将调用didMoveToParentViewController:子视图控制器的方法。”


此外,还有制定了一个例子在这里和示例代码在这里。


祝好运


查看完整回答
反对 回复 2019-10-24
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

注意:如果您要移动的项目是具有被覆盖的自定义类(除非您的覆盖在内部对其进行了调用),您确实需要在致电willMoveToParentViewController之前addChildViewControlleraddChildViewController

查看完整回答
反对 回复 2019-10-24
  • 3 回答
  • 0 关注
  • 419 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信