2017-08-17 44 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重新加載一點點清潔,可以多次調用,只是導致毫無意義的輪詢和更新不變的信息。

相關問題