2012-02-10 10 views

Respuesta

4

implementar el método UINavigationControllerDelegate:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 

y Query para averiguar el controlador de vista que se muestra actualmente:

navigationController.topViewController 

Este es el que está viniendo.

+0

Puedo ser tonto pero no lo entiendo. Implemento el método 'UINavigationControllerDelegate' en mi nivel 2 viewcontroller. Y cuando 'NSLog (@"% @ ", navigationController.topViewController);' obtengo el 'UIViewController' actual (nivel 2) que se muestra actualmente (no el controlador de vista de nivel 3 ni el controlador de vista de nivel 1 desde el que navegué) –

+0

@PeterWarbo no eres tonto, lo soy. Lo siento por eso. No hay una manera fácil, pero aquí hay un enfoque que debería funcionar. Cualquiera que sea la clase de instancia de su controlador de navegación, conviértalo en un KVO (observador de clave-valor) de la propiedad navigationController.topViewController. Siempre que esta propiedad cambie, se llamará a observeValueForKeyPath y se le proporcionará un diccionario de cambios en el parámetro de contexto. De esto puede determinar cuál era el valor anterior. – Rayfleck

3

Puede ver toda la pila UINavigationController utilizando la propiedad viewControllers.

int count = [navigationController.viewControllers count]; 

topController = [navigationController.viewControllers objectAtIndex:count - 1]; 
previousController = [navigationController.viewControllers objectAtIndex:count - 2]; 
//... 
//... 
rootController = [navigationController.viewControllers objectAtIndex: count - count]; 
2

iOS 5.0 agregado [UIViewController isMovingToParentViewController]. Durante viewWillAppear y viewDidAppear, esto devuelve YES si proviene de un controlador de vista de numeración inferior, NO en caso contrario. El nombre es desafortunadamente confuso: pensaría que [UIViewController isMovingFromParentViewController] sería el método correcto para llamar.

Sin embargo, en nombre de todos los cheapskates cuyos dispositivos de segunda generación están bloqueados en iOS 4.2.1, no utilicen las funciones de iOS 5 a menos que realmente lo necesiten.

Cuestiones relacionadas