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:
消息。您也可以注册UIApplicationDidBecomeActiveNotification
和UIApplicationWillResignActiveNotification
的通知。
是的,您必须手动将 viewDidAppear: 消息传播到您的子视图。这是按设计工作的。
【讨论】:
根据我的经验,当您必须将 viewDidAppear 传播到“subViewControllers”时,viewcontrollers 的布局会被破坏。我很高兴看到“这是按设计工作”的引用 我不能给你苹果的官方声明,但谷歌我们搜索“viewdidappear subview”,你会发现一些证据,尽管特别是与 UINavigationController 相关。而且我自己也经历过必须手动调用它。 感谢您的友好回答。【参考方案2】:还有:
(也是一个应用委托方法):
- (void)applicationDidEnterBackground:(UIApplication *)application
【讨论】:
以上是关于UIViewController 的 viewDidAppear/viewDidDisappear:应该在啥时候调用这些方法?的主要内容,如果未能解决你的问题,请参考以下文章