我有这个功能:
func setMoneyValues() {
balanceLabel.text = User.current.roundBalance()
oweLabel.text = User.current.roundOwed()
userLabel.text = User.current.roundUser()
}
我在viewdidload中执行。但是,它只被调用一次,如果我转到另一个选项卡(由选项卡栏控制器管理),更改值,并返回到此页面,值不会更新,因为该函数不会再次调用。每次重新打开标签时我能做什么才能调用它?
答案 0 :(得分:6)
也许你想要它在viewDidAppear
,只是被告知当对话框在控制器上方并且消失时调用它,并且当用户背景并在应用程序中返回时,但是考虑到代码的性质你发布了,这可能就是你想要的地方。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setMoneyValues()
}
此外,如果您希望在视图出现之前更新,您可以更改为viewWillAppear
否则它具有相同的签名。
答案 1 :(得分:0)
将它移到viewDidAppear()中可以获得更好的效果。
只有在将视图加载到内存中时才会调用viewDidLoad()函数,该内存在标签栏中只应发生一次,即IIRC。
每次视图出现在屏幕上时都会调用viewDidAppear()函数。
答案 2 :(得分:0)
更好的方法来执行您想要做的事情,而不是每次出现视图时重新加载数据,都是在数据更改时重新加载数据。
因此,视图中的初始设置确实加载是可以的,但您也可以在用户对象中设置一个NSNotification,只要用户数据发生变化就会触发。然后,您可以在设置初始值后在viewDidLoad
方法中订阅此通知,并且在通知处理程序中,您只需将值设置为新状态。
比viewDid/WillAppear
中的重新加载更清晰,可以多次调用,只会导致无意义的轮询和更新未更改的信息。