nfc ios 12
¿Cómo decirle al controlador de vista activo cuando se llama a applicationDidBecomeActive? (5)
Siento que me estoy perdiendo un truco aquí ...
Solo quiero llamar a viewDidLoad o viewDidAppear en el controlador de vista activo actual cuando se llama a applicationDidBecomeActive, así que puedo restablecer algunas animaciones o lo que sea, cuando la aplicación se inicie nuevamente desde el fondo. A algunas de mis opiniones no les importa, pero otras realmente necesitan saber.
Estoy usando Storyboards y mi archivo de delegado de aplicaciones tiene las funciones estándar, pero todas con cuerpos VACÍOS. Por ejemplo, didFinishLaunchingWithOptions solo devuelve YES y no hace nada más. El storyboard automágicamente hace todo lo que supongo.
Entonces, ¿cómo puedo hablar con el controlador de la vista actual desde mi aplicación en blanco, sin información, del delegado de la aplicación?
En lugar de enviar una notificación de su delegado de aplicación, el sistema operativo envía automáticamente una notificación que puede observar:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(initSongInfo)
name:UIApplicationDidBecomeActiveNotification
object:nil];
y, por supuesto, asegúrese de dejar de observar en algún momento antes o dentro de su método dealloc, llamando a:
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIApplicationDidBecomeActiveNotification
object:nil];
En lugar de intentar realizar un seguimiento de qué ViewController es actual, puede enviar una NSNotification desde su AppDelegate y suscribirse a él en su ViewController. De esa manera, el controlador de la vista realiza un seguimiento de si necesita o no llamar viewDidAppear.
Versión rápida:
Puede agregar esta fila en su viewDidLoad
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(viewDidBecomeActive), name: UIApplicationDidBecomeActiveNotification, object: nil)
func viewDidBecomeActive(){
print("viewDidBecomeActive")
}
Yo recomendaría el uso de notificaciones.
En el método applicationdidBecomeActive del delegado de la aplicación, colóquelo en este código:
[[NSNotificationCenter defaultCenter] postNotificationName:@"appDidBecomeActive" object:nil];
En el método init de su controlador de vista activo actual suscríbase a la notificación.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateStuff)
name:@"appDidBecomeActive"
object:nil];
Implementa el método "updateStuff" en tu controlador y deberías poder hacer lo que quieras cuando la aplicación se active.
su AppDelegate tendrá una propiedad de ventana, esa ventana tendrá una propiedad rootViewController. Usted puede encontrar su controlador de vista aquí.
Si está utilizando un TabBarController, el rootviewcontroller será el tabbarcontroller, y puede llamar al selectViewController del control de tabbar para obtener el viewController actual.
UIViewController *rootViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
if ([rootViewController isKindOfClass:[UITabBarController Class]])
rootViewController = ((UITabBarController *)rootViewController).selectedViewController;
else if ([rootViewController isKindOfClass:[UINavigationController Class]])
rootViewController = ((UINavigationController *)rootViewController).topViewController;
[rootViewController viewDidAppear];
Si tiene una jerarquía de vistas más compleja con los controles de navegación o las vistas modales, puede llamar a presentViewController o topViewController.