重新加载根视图控制器
Posted
技术标签:
【中文标题】重新加载根视图控制器【英文标题】:Reload root view controller 【发布时间】:2012-06-21 14:29:13 【问题描述】:我在我的应用程序中使用UINavigationController
。在viewDidLoad
中,根视图控制器从互联网获取信息,解析并显示。
当转到UINavigationController
中的另一个视图,然后返回到根UIViewController
时,不会重新加载控制器中的信息。这让我认为viewDidLoad
没有被调用。
当根视图控制器弹回到UINavigationController
中时,我应该使用什么方法来确保重新加载此信息?
编辑:
感谢大家的快速回复,这意味着很多。关于您的答案的另一个问题:viewWillAppear
或viewDidAppear
?各有优缺点吗?
【问题讨论】:
viewWillAppear 将在视图显示之前处理,viewDidAppear 将在视图被压入堆栈顶部后处理。 【参考方案1】:您应该处理viewWillAppear:
或viewDidAppear:
,具体取决于您希望在屏幕上显示视图之前还是之后进行重新加载。 viewDidLoad
仅在视图加载时调用一次。
【讨论】:
根据从互联网上检索和处理您的信息的时间,您可能还需要致电setNeedsDisplay
,它会告诉设备需要刷新视图。
@DevinGund 这是一个link 对您后续问题的出色回答。【参考方案2】:
您应该使用viewDidAppear
,viewDidLoad
仅在第一次加载视图后调用。
在这里查看:
UIView Programattion Guide
【讨论】:
【参考方案3】:viewDidLoad
仅在最初创建视图控制器时调用,或者如果它因为隐藏而被卸载并且应用程序收到内存警告时调用。您可以交替实现 viewWillAppear:
或 viewDidAppear:
来刷新您的 UI。
【讨论】:
【参考方案4】:你是对的,它没有被调用。如果您想在每次访问 UIViewController
时调用它(您的 UINavigationController
中有一个),只需将其放在 viewDidAppear
或 viewWillAppear
上即可。
viewWillAppear
发生在 viewDidAppear
之前。出于速度目的,我会以异步方式在辅助线程上的viewDidAppear
上执行此操作,因此 UI 线程不会减慢。检索到数据后,我将更新视图。
【讨论】:
以上是关于重新加载根视图控制器的主要内容,如果未能解决你的问题,请参考以下文章