2017-08-17 3 views
1

Ich habe diese Funktion:wie eine Funktion jedes Mal um einen UIViewController geladen

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

, die ich in viewDidLoad auszuführen. Es wird jedoch nur einmal aufgerufen, und wenn ich auf eine andere Registerkarte gehe (verwaltet von einem Tab-Controller), ändern Sie die Werte und kehren Sie zu dieser Seite zurück. Die Werte werden nicht aktualisiert, da die Funktion nicht erneut aufgerufen wird. Alles, was ich tun kann, damit es jedes Mal aufgerufen wird, wenn der Tab wieder geöffnet wird?

Antwort

5

Vielleicht möchten Sie es in viewDidAppear, nur darauf hingewiesen, dass dies aufgerufen wird, wenn ein Dialogfeld über den Controller ist und verschwindet, und auch wenn der Benutzer Hintergründe und kommt zurück in der App, aber angesichts der Art des Codes, den Sie gebucht haben, Das ist wahrscheinlich wo du es willst.

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

    setMoneyValues() 
} 

Auch wenn Sie es vor die Ansicht scheint zu aktualisieren, können Sie zu viewWillAppear ändern sie die gleiche Signatur hat anders.

0

Sie sollten bessere Ergebnisse erzielen, indem Sie es in viewDidAppear() verschieben.

Die Funktion viewDidLoad() wird nur aufgerufen, wenn die Ansicht in den Speicher geladen wird, was in einer Tab-Leiste nur einmal geschehen soll, IIRC.

Die Funktion viewDidAppear() wird jedes Mal aufgerufen, wenn die Ansicht auf dem Bildschirm erscheint.

0

Ein besserer Weg zu tun, was Sie tun wollen, anstatt die Daten jedes Mal neu zu laden, wenn die Ansicht erscheint, ist das Neuladen der Daten, wenn die Daten geändert werden.

So die ursprüngliche Einrichtung in Sicht geladen wurde, ist okay, aber was Sie auch tun könnten, ist in Ihrem Benutzerobjekt eingerichtet eine NSNotification, die jedes Mal ausgelöst wird, wenn sich die Benutzerdaten ändern. Sie können diese Benachrichtigung dann in der viewDidLoad-Methode abonnieren, nachdem Sie die Anfangswerte festgelegt haben, und im Benachrichtigungshandler können Sie die Werte einfach auf den neuen Status festlegen.

Ein wenig sauberer als Nachladen in viewDid/WillAppear, die mehrmals aufgerufen werden kann und nur sinnlose Abfrage und Aktualisierung von unveränderten Informationen verursachen.

Verwandte Themen