veloce
Risposta breve
Usa un NotificationCenterosservatore piuttosto che viewWillAppear.
override func viewDidLoad() {
super.viewDidLoad()
// set observer for UIApplication.willEnterForegroundNotification
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
// my selector that was defined above
@objc func willEnterForeground() {
// do stuff
}
Risposta lunga
Per scoprire quando un'app torna dallo sfondo, usa un NotificationCenterosservatore anziché viewWillAppear. Ecco un esempio di progetto che mostra quali eventi accadono quando. (Questo è un adattamento di questa risposta dell'Obiettivo-C .)
import UIKit
class ViewController: UIViewController {
// MARK: - Overrides
override func viewDidLoad() {
super.viewDidLoad()
print("view did load")
// add notification observers
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
override func viewWillAppear(_ animated: Bool) {
print("view will appear")
}
override func viewDidAppear(_ animated: Bool) {
print("view did appear")
}
// MARK: - Notification oberserver methods
@objc func didBecomeActive() {
print("did become active")
}
@objc func willEnterForeground() {
print("will enter foreground")
}
}
Al primo avvio dell'app, l'ordine di output è:
view did load
view will appear
did become active
view did appear
Dopo aver premuto il pulsante Home e riportato l'app in primo piano, l'ordine di output è:
will enter foreground
did become active
Quindi, se stavi originariamente cercando di utilizzare viewWillAppear allora UIApplication.willEnterForegroundNotificationè probabilmente quello che volete.
Nota
A partire da iOS 9 e versioni successive, non è necessario rimuovere l'osservatore. La documentazione afferma:
Se la tua app ha come target iOS 9.0 e versioni successive o macOS 10.11 e versioni successive, non è necessario annullare la registrazione di un osservatore nel suo deallocmetodo.
applicationWillEnterForeground:per determinare quando l'applicazione è rientrata nello stato attivo.