每次加载 UIViewController 时如何 运行 一个函数

How to run a function every time a UIViewController is loaded

我有这个功能:

func setMoneyValues() {
        balanceLabel.text = User.current.roundBalance()
        oweLabel.text = User.current.roundOwed()
        userLabel.text = User.current.roundUser()
    }

我在 viewdidload 中执行。但是,它只被调用一次,如果我转到另一个选项卡(由选项卡栏控制器管理),更改值,然后返回此页面,值不会更新,因为不会再次调用该函数。我能做些什么来让它在每次重新打开选项卡时都被调用?

也许您希望在 viewDidAppear 中使用它,请注意,当对话框位于控制器上方并消失时,以及当用户返回应用程序并返回时,它会被调用,但考虑到的性质您发布的代码,这可能就是您想要的地方。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    setMoneyValues()
}

此外,如果您希望它在 视图出现之前 更新,您可以更改为 viewWillAppear 否则它具有相同的签名。

将它移动到 viewDidAppear() 中应该会得到更好的结果。

viewDidLoad() 函数仅在视图加载到内存时被调用,这在标签栏中应该只发生一次,IIRC。

每次视图出现在屏幕上时都会调用 viewDidAppear() 函数。

做您想做的事情的更好方法是在数据更改时重新加载数据,而不是每次出现视图时都重新加载数据。

因此视图中的初始设置确实加载没问题,但您还可以在您的用户对象中设置一个 NSNotification,只要用户数据发生变化就会触发该 NSNotification。然后,您可以在设置初始值后在 viewDidLoad 方法中订阅此通知,并且在通知处理程序中,您只需将值设置为新状态即可。

viewDid/WillAppear 中的重新加载更简洁,后者可能会被多次调用,只会导致无意义的轮询和未更改信息的更新。