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

时间:2017-08-17 16:45:08

标签: swift viewdidload

我有这个功能:

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

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

3 个答案:

答案 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中的重新加载更清晰,可以多次调用,只会导致无意义的轮询和更新未更改的信息。