Rápido
Respuesta corta
Use un NotificationCenter
observador 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 NotificationCenter
observador 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, viewWillAppear
entonces UIApplication.willEnterForegroundNotification
probablemente 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 dealloc
método.
applicationWillEnterForeground:
para determinar cuándo su aplicación ha vuelto a ingresar al estado activo.