Tengo un controlador de vista en el que mi valor es 0 (etiqueta) y cuando abro ese controlador de vista desde otro ViewController
, viewDidAppear
configuré el valor 20 en la etiqueta. Funciona bien, pero cuando cierro mi aplicación y de nuevo abro la aplicación, pero el valor no cambia porque viewDidLoad
, viewDidAppear
y viewWillAppear
nada se ha llamado. ¿Cómo puedo llamar cuando abro mi aplicación? ¿Tengo que hacer algo applicationDidBecomeActive
?
175
Respuestas:
Curioso por la secuencia exacta de eventos, instrumenté una aplicación de la siguiente manera: (@Zohaib, puede usar el código NSNotificationCenter a continuación para responder a su pregunta).
En el lanzamiento, la salida se ve así:
Ingrese el fondo y vuelva a ingresar al primer plano:
fuente
Usando Objective-C
Usted debe registrar una
UIApplicationWillEnterForegroundNotification
en suViewController
'sviewDidLoad
método y cada vez que la aplicación se vuelve de fondo se puede hacer lo que quiere hacer en el método registrado para la notificación.ViewController
'S viewWillAppear o viewDidAppear no serán llamados cuando la aplicación se vuelve de fondo al primer plano.No olvide anular el registro de la notificación para la que está registrado.
Tenga en cuenta que si registra su
viewController
paraUIApplicationDidBecomeActiveNotification
entonces, se llamaría a su método cada vez que su aplicación se active, no se recomienda registrarseviewController
para esta notificación.Usando Swift
Para agregar observador puede usar el siguiente código
Para eliminar el observador, puede usar la función deinit de swift.
fuente
Versión Swift 3.0 ++
En su
viewDidLoad
, regístrese en el centro de notificaciones para escuchar esto abierto desde la acción de fondoLuego agregue esta función y realice la acción necesaria
Finalmente, agregue esta función para limpiar el observador de notificaciones cuando se destruya su controlador de vista.
fuente
Swift 4.2. versión
Regístrese en NotificationCenter
viewDidLoad
para recibir notificaciones cuando la aplicación regrese del fondoImplemente el método que debería llamarse.
Puede eliminar el observador una vez que
ViewController
se destruye. Esto solo se requiere debajo de iOS9 y macOS 10.11fuente
Simplemente haga que su controlador de vista se registre para la
UIApplicationWillEnterForegroundNotification
notificación y reaccione en consecuencia.fuente
viewDidLoad
recibir la notificación sugerida en @nsgulliver. SuviewDidAppear
también llamardoYourStuff
a configurar su etiqueta con el valor deseado.Creo que registrarse para la UIApplicationWillEnterForegroundNotification es arriesgado, ya que puede terminar con más de un controlador reaccionando a esa notificación. Nada garantiza que estos controladores sigan siendo visibles cuando se reciba la notificación.
Esto es lo que hago: forzo la llamada viewDidAppear en el controlador activo directamente del método didBecomeActive del delegado de la aplicación:
Agregue el siguiente código a
- (void)applicationDidBecomeActive:(UIApplication *)application
fuente
intente agregar esto en AppDelegate applicationWillEnterForeground.
fuente
Según la documentación de Apple:
Descripción: le
dice a un controlador secundario que su apariencia está a punto de cambiar. Si está implementando un controlador de contenedor personalizado, use este método para decirle al niño que sus vistas están a punto de aparecer o desaparecer . No invoque
viewWillAppear:
,viewWillDisappear:
,viewDidAppear:
, oviewDidDisappear:
directamente .Descripción:
Le dice a un controlador secundario que su apariencia ha cambiado. Si está implementando un controlador de contenedor personalizado, use este método para decirle al niño que la transición de vista se ha completado.
Código de muestra:
Pregunta: ¿Cómo lo solucioné?
Respuesta : Encontré este trozo de líneas en la aplicación. Estas líneas hicieron que mi aplicación no recibiera ninguna notificación de ViewWillAppear. Cuando comenté estas líneas está funcionando bien .
fuente