Rapide
Réponse courte
Utilisez NotificationCenter
plutôt un observateur que 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
}
Longue réponse
Pour savoir quand une application revient de l'arrière-plan, utilisez NotificationCenter
plutôt un observateur que viewWillAppear
. Voici un exemple de projet qui montre quels événements se produisent quand. (Ceci est une adaptation de cette réponse Objective-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")
}
}
Au premier démarrage de l'application, l'ordre de sortie est le suivant:
view did load
view will appear
did become active
view did appear
Après avoir appuyé sur le bouton d'accueil, puis remis l'application au premier plan, l'ordre de sortie est le suivant:
will enter foreground
did become active
Donc , si vous essayez d'utiliser à l' origine viewWillAppear
puis UIApplication.willEnterForegroundNotification
est probablement ce que vous voulez.
Remarque
Depuis iOS 9 et versions ultérieures, vous n'avez pas besoin de supprimer l'observateur. La documentation indique:
Si votre application cible iOS 9.0 et versions ultérieures ou macOS 10.11 et versions ultérieures, vous n'avez pas besoin de désinscrire un observateur dans sa dealloc
méthode.
applicationWillEnterForeground:
pour déterminer quand votre application est à nouveau entrée dans l'état actif.