2017-08-17 95 views
1

我有这样的功能:如何每次运行一个功能一个UIViewController加载

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

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

回答

5

也许你想要它在viewDidAppear,只是被告知当一个对话框在控制器上并且消失时,以及当用户背景和应用程序返回时调用它,但考虑到您发布的代码的性质,那可能就是你想要的地方。

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

    setMoneyValues() 
} 

另外如果你想它来更新出现的视图之前,你可以改变viewWillAppear它具有相同的签名,否则。

0

您应该通过将其移到viewDidAppear()中来获得更好的结果。

当视图加载到内存中时,viewDidLoad()函数只会被调用,在标签栏中它只会出现一次,IIRC。

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

0

更好的方式来做你想做的事情,而不是每次出现视图时重新加载数据,就是在数据改变时重新加载数据。

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

比在viewDid/WillAppear重新加载一点点清洁,可以多次调用,只是导致毫无意义的轮询和更新不变的信息。

相关问题