【问题标题】:Swift call Function when ViewController is visible当 ViewController 可见时 Swift 调用函数
【发布时间】:2020-07-02 16:37:56
【问题描述】:

我有一个很遗憾无法解决的小问题。我有几个 ViewController。从 ViewController 回到前一个 ViewController 时,我需要调用一个函数(它不会重新加载,因此不会调用 viewDidLoad / Appear)。

难道不应该有viewDidLoad之类的东西,但每次ViewController可见时都会被调用吗?

这就是我打开 ViewControllers 的方式:

let vc = storyboard?.instantiateViewController(identifier: "levels_vc") as! LevelsViewController
        present(vc, animated: true)

这是我尝试获取事件的方式,但它只在第一次被调用(当 ViewController 第一次加载时),而不是当我从这个 ViewController 打开一个新的 ViewController 并关闭新的时。

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("VC appeared!")
    }

【问题讨论】:

  • 你是如何“从一个 ViewController 回到前一个 ViewController”的?
  • 你试过放松转场吗?
  • 我没有使用序列。我将在原始问题中添加我打开和关闭 ViewControllers 的方式。

标签: ios swift xcode viewcontroller


【解决方案1】:

您可以为此使用viewWillAppearviewDidAppear!。

viewWillAppear() 每次视图出现在屏幕上时都会被调用。 这对于每次滚动到需要更新的视图很有用。例如,音乐应用中的“正在播放”部分或滚动到时更新的任何视图。

viewDidAppear 在视图出现在用户屏幕上时被调用。 这是将任何其他元素“延迟加载”到屏幕上的好地方。如果您的用户界面非常复杂,您不希望在前面提到的方法中停滞或造成延迟。 最好在屏幕上加载一些东西,然后调用一些方法来更新一些大型应用程序的视图。

这也是一个创建任何动画的地方。

【讨论】:

  • viewWillAppear 和 viewDidAppear 在我返回 ViewController 时都不会被调用,只有在 ViewController 第一次加载时才会调用。
  • 你正在通过storyboard.instatntiateViewController打开一个vc,这意味着每次你的viewDidload也会被调用。你能分享整个代码吗?
  • 另外,您是否使用viewWillAppear/viewDidAppear 中的任何打印语句或函数来确认它们没有被调用?
  • 是的,我会分享代码。我使用 print 语句来确认它们没有被调用。
  • 通过查看这段代码,无法追踪错误。您需要共享您正在导航的两个视图控制器的代码。
【解决方案2】:

那就是ViewDidAppear()ViewDidAppear() - Apple Developer

【讨论】:

  • 不,当我返回 ViewController 时不会调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多