UIViewController 的 viewDidAppear/viewDidDisappear:应该在啥时候调用这些方法?

Posted

技术标签:

【中文标题】UIViewController 的 viewDidAppear/viewDidDisappear:应该在啥时候调用这些方法?【英文标题】:UIViewController's viewDidAppear/viewDidDisappear: when exactly are that methods supposed to be called?UIViewController 的 viewDidAppear/viewDidDisappear:应该在什么时候调用这些方法? 【发布时间】:2011-02-11 10:02:01 【问题描述】:

我确实需要澄清一下何时应该调用 viewDidAppear/viewDidDisappear 方法...

    如果应用程序在显示某些视图时进入后台,在这种情况下,我希望在链接到该视图的 UIViewController 上调用 viewDidDisappear。另一方面,如果应用程序在成为后台后进入前台,我希望 viewDidAppear 会被调用。但这种方式行不通。 如果 UINavigationController 显示一个我们称为“A”的 UIViewController,并且该 UIViewController 链接到一个视图,该视图的子视图链接到另一个我们称为“B”的 UIViewController,则不会在控制器“B”上调用 viewDidAppear 方法。我必须自己传播 viewDidAppear 吗?我很困惑...

提前谢谢你!

【问题讨论】:

【参考方案1】:

    它们不会被调用,因为它们不会消失并重新出现,除非您告诉它们消失。您的整个应用程序已暂停。如果您想知道您的应用程序是否被暂停或重新激活,您需要收听应用程序代表applicationDidBecomeActive:applicationWillResignActive: 消息。您也可以注册UIApplicationDidBecomeActiveNotificationUIApplicationWillResignActiveNotification的通知。

    是的,您必须手动将 viewDidAppear: 消息传播到您的子视图。这是按设计工作的。

【讨论】:

根据我的经验,当您必须将 viewDidAppear 传播到“subViewControllers”时,viewcontrollers 的布局会被破坏。我很高兴看到“这是按设计工作”的引用 我不能给你苹果的官方声明,但谷歌我们搜索“viewdidappear subview”,你会发现一些证据,尽管特别是与 UINavigationController 相关。而且我自己也经历过必须手动调用它。 感谢您的友好回答。【参考方案2】:

还有:

(也是一个应用委托方法):

- (void)applicationDidEnterBackground:(UIApplication *)application

【讨论】:

以上是关于UIViewController 的 viewDidAppear/viewDidDisappear:应该在啥时候调用这些方法?的主要内容,如果未能解决你的问题,请参考以下文章

多次点击时 UITextView textViewShouldBeginEditing 崩溃

iOS开发之UIImageView的使用(swift)

使用自动布局读取 UI 正确框架

模拟器中的 UIView 边界/绘图不正确

scrollView 不能快速滚动

UISearchBar 显示SearchBarInNavigationBar