Rápido
Respuesta corta
Use un NotificationCenterobservador en lugar de 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
}
Respuesta larga
Para saber cuándo una aplicación vuelve del fondo, use un NotificationCenterobservador en lugar de viewWillAppear. Aquí hay un proyecto de muestra que muestra qué eventos ocurren cuando. (Esta es una adaptación de esta respuesta del Objetivo 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 iniciar la aplicación por primera vez, el orden de salida es:
view did load
view will appear
did become active
view did appear
Después de presionar el botón de inicio y luego volver a poner la aplicación en primer plano, el orden de salida es:
will enter foreground
did become active
Entonces, si originalmente estaba tratando de usar, viewWillAppearentonces UIApplication.willEnterForegroundNotificationprobablemente sea lo que desea.
Nota
A partir de iOS 9 y versiones posteriores, no es necesario eliminar el observador. La documentación dice:
Si su aplicación se dirige a iOS 9.0 y posterior o macOS 10.11 y posterior, no necesita cancelar el registro de un observador en su deallocmétodo.
applicationWillEnterForeground:para determinar cuándo su aplicación ha vuelto a ingresar al estado activo.