【问题标题】: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()

返回时如何更新主视图?

【问题讨论】:

  • 因为视图不会再次加载,它只会加载一次。

标签: ios swift


【解决方案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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多