【问题标题】:Should EXPLICITLY call willMoveToParentViewController:(UIViewController *)parent & didMoveToParentViewController:(UIViewController *)parent?是否应该明确调用 willMoveToParentViewController:(UIViewController *)parent & didMoveToParentViewController:(UIViewController *)parent?
【发布时间】:2012-11-29 02:20:49
【问题描述】:

WWDC 2012 会议 中,标题为 iOS 上的视图控制器的演变- (void)willMoveToParentViewController:(UIViewController *)parent- (void)didMoveToParentViewController:(UIViewController *)parent 被提及用于视图转换的自定义容器实现.

如果我没记错的话,似乎需要在- (void)removeFromSuperview 之前或- (void)addSubview:(UIView *)view 之后显式调用这些方法

但是,当我在子类实现中记录它们时,它显示它们已被称为 IMPLICITLY。它们已自动在正确的位置被调用。

所以,如果真的需要显式调用这些方法(如 WWDC 会话中的指示),或者不遵循它并清除不必要的代码行,我有点困惑。

【问题讨论】:

标签: ios uiview uiviewcontroller transition wwdc


【解决方案1】:

在我的书中解释过:

http://www.apeth.com/iOSBook/ch19.html#_container_view_controllers

基本上其中一个确实是隐式调用的,但另一个你必须显式调用。真让人抓狂;我每次都要查规则。

【讨论】:

  • removeFromSuperviewremoveFromParentViewController 被称为一对时,我看到didMoveToParentViewController 的冗余日志引起了我的困惑,而视图正在动画。感谢您的澄清,我确实能够确认正确使用
  • 海报提到的这本书是免费的、在线的、有用的。我编辑了答案以明确这一点,但我的编辑被拒绝了。
  • 嘿@matt!我有一个给你:唯一的事情是,viewWillAppear(等等)被调用两次。看起来真的很乱。例如,我只是将一个固定的 VC 放在屏幕上的一个盒子里。所以 addChildVC,然后是 addSubview,然后是 didMoveToParent。为此,您将获得 viewWillAppear。但是,如果您使用故事板容器视图,苹果似乎会偷偷地避免这个问题。 (我必须从众多 VC 中选择一个,所以,我手动进行。)糟透了!感谢这篇文章
  • @JoeBlow 如果你得到viewWillAppear 两次,你做错了什么。我有一些示例说明如何做到这一点,记录所有内容以证明正确的消息在正确的时间到达:例如,github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 以及 github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 记录...
  • 嗯 - 我非常感谢@Matt 的评论,谢谢。我在这里减少了这个问题...stackoverflow.com/questions/25593285...请注意,有趣的是,我正在制作一个全新的 vc(不是人们通常测试的案例,因为它微不足道且容易忘记,现在每个人都使用容器视图)...所以.. 我不知道。再次感谢!
猜你喜欢
  • 2015-11-13
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2012-10-06
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多