objective life example containerviewcontroller container ios objective-c uiviewcontroller

example - lifecycle viewcontroller ios



viewWillDisappear no se invocó al llamar a popToRootViewControllerAnimated (2)

La vista probablemente no estaba en la pantalla. Tiene que estar en pantalla (visible) para que se viewWillDisappear: método viewWillDisappear: . Si vuelve desde el fondo, no fue visible.

Podría intentar usar willMoveToParentViewController: que se llama cuando el controlador de vista se elimina de su principal.

Trabajo en una aplicación heredada y descubrí que mis métodos de view[Will/Did]Disappear no siempre se activan correctamente.

El caso es que tengo un UIViewController (personalizado) configurado como rootViewController en AppDelegate. Este controlador raíz tiene un UINavigationController , que tiene dos controles de vista empujados sobre él. Cuando el usuario presiona el botón de inicio, el usuario se desconecta. Cuando más tarde regresa a la aplicación, la aplicación llama a [UINavigationController popToRootViewControllerAnimated:YES] y luego muestra un UIViewController modal para iniciar sesión.

El problema es: cuando UINavigationController / pop en el UINavigationController normalmente, mi método viewWillDisappear se llama correctamente. Pero cuando uso el método popToRootViewControllerAnimated: viewWillDisappear no se viewWillDisappear en ninguno de los viewControllers que se quitan.

La búsqueda en Internet solo ha dado dos posibles razones:

Ninguna de estas sugerencias es el caso en mi aplicación. Y no tengo idea de dónde mirar. ¿Alguien tiene una sugerencia sobre lo que se ha hecho mal en la aplicación?


tan útil para mí

[nav performSelector:@selector(popToRootViewControllerAnimated:) withObject:nil afterDelay:0.0];

Reescribí UITabBarController

- (void)setSelectedIndex:(NSUInteger)selectedIndex { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ UINavigationController *navigationController = [originalViewController as:[UINavigationController class]]; if (navigationController.presentedViewController) { [navigationController dismissViewControllerAnimated:NO completion:^{ [navigationController popToRootViewControllerAnimated:NO]; }]; }else if (navigationController.topViewController){ [navigationController popToRootViewControllerAnimated:NO]; } });

}