每次加载 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
中的重新加载更简洁,后者可能会被多次调用,只会导致无意义的轮询和未更改信息的更新。
我有这个功能:
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
中的重新加载更简洁,后者可能会被多次调用,只会导致无意义的轮询和未更改信息的更新。