重新加载根视图控制器

Posted

技术标签:

【中文标题】重新加载根视图控制器【英文标题】:Reload root view controller 【发布时间】:2012-06-21 14:29:13 【问题描述】:

我在我的应用程序中使用UINavigationController。在viewDidLoad中,根视图控制器从互联网获取信息,解析并显示。

当转到UINavigationController 中的另一个视图,然后返回到根UIViewController 时,不会重新加载控制器中的信息。这让我认为viewDidLoad 没有被调用。

当根视图控制器弹回到UINavigationController 中时,我应该使用什么方法来确保重新加载此信息?

编辑:

感谢大家的快速回复,这意味着很多。关于您的答案的另一个问题:viewWillAppearviewDidAppear?各有优缺点吗?

【问题讨论】:

viewWillAppear 将在视图显示之前处理,viewDidAppear 将在视图被压入堆栈顶部后处理。 【参考方案1】:

您应该处理viewWillAppear:viewDidAppear:,具体取决于您希望在屏幕上显示视图之前还是之后进行重新加载。 viewDidLoad 仅在视图加载时调用一次。

【讨论】:

根据从互联网上检索和处理您的信息的时间,您可能还需要致电setNeedsDisplay,它会告诉设备需要刷新视图。 @DevinGund 这是一个link 对您后续问题的出色回答。【参考方案2】:

您应该使用viewDidAppearviewDidLoad 仅在第一次加载视图后调用。

在这里查看:

UIView Programattion Guide

【讨论】:

【参考方案3】:

viewDidLoad 仅在最初创建视图控制器时调用,或者如果它因为隐藏而被卸载并且应用程序收到内存警告时调用。您可以交替实现 viewWillAppear:viewDidAppear: 来刷新您的 UI。

【讨论】:

【参考方案4】:

你是对的,它没有被调用。如果您想在每次访问 UIViewController 时调用它(您的 UINavigationController 中有一个),只需将其放在 viewDidAppearviewWillAppear 上即可。


viewWillAppear 发生在 viewDidAppear 之前。出于速度目的,我会以异步方式在辅助线程上的viewDidAppear 上执行此操作,因此 UI 线程不会减慢。检索到数据后,我将更新视图。

【讨论】:

以上是关于重新加载根视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

动画视图控制器并同时在表格视图中重新加载数据

根视图控制器 Swift

状态恢复时根视图控制器显示很短

单击按钮导航到根视图控制器

如何从 Modal ViewController 重新加载父 UITableViewController 中的数据

如何让导航控制器在屏幕外加载时加载其根视图控制器?