返回细节视图控制器时,主视图未更新?
Posted
技术标签:
【中文标题】返回细节视图控制器时,主视图未更新?【英文标题】:When going back in details viewcontroller, main view is not updated? 【发布时间】:2018-05-22 17:49:03 【问题描述】:在我的详细信息控制器中,我单击它并返回到主控制器。
@IBAction func backButtonClick(_ sender: UIButton)
dismiss(animated: true, completion: nil)
为什么主函数viewDidLoad没有再次命中?
viewDidLoad()
返回时如何更新主视图?
【问题讨论】:
因为视图不会再次加载,它只会加载一次。 【参考方案1】:你需要实现viewDidAppear
,因为viewDidLoad
在VC启动时只触发一次
override func viewDidAppear(_animated:Bool)
super.viewDidAppear(animated)
【讨论】:
谢谢,这正是我想要的。 我不会说答案完全无效,但请记住,在某些时候,您可能会在显示视图后调用viewDidAppear
时遇到相当简单的延迟...
【参考方案2】:
为什么主函数viewDidLoad没有再次命中?
因为viewDidLoad()
方法在视图控制器的视图已加载时调用,即当视图控制器的视图有新分配到内存中时会调用它。因此,viewDidLoad
在返回(从当前视图控制器关闭/弹出)到视图控制器时不会再次被调用,因为它已经加载,它仍在内存中。
返回时如何更新主视图?
好吧,实际上viewDidLoad
并不是视图控制器视图生命周期的唯一方法,当然还有其他选项可以实现您所寻找的。合法有效的解决方案之一是将“返回”时应调用的代码从 viewDidLoad
移动到 viewWillAppear(_:)
方法中:
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
// here we go...
它在显示视图控制器的视图之前被调用,这意味着即使在两种情况下它都会被调用:当呈现/推送到视图控制器时和甚至在关闭/弹出之后。
此外:
不过viewWillAppear(_:)
不仅可以解决您的问题,“返回”视图控制器时还会调用其他方法,我建议您检查一下:
Looking to understand the ios UIViewController lifecycle
还有:
UIViewController viewDidLoad vs. viewWillAppear: What is the proper division of labor?
【讨论】:
以上是关于返回细节视图控制器时,主视图未更新?的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationBar titleTextAttributes 从视图控制器返回后未更新