Necesito identificar qué UIViewController
se mostró anteriormente en un UINavigationController
. Mi navegación es de 3 niveles de profundidad, en el nivel 2. Necesito identificar si llegué aquí presionando desde el nivel 1 o si llegué aquí desde el nivel 3. ¿Cómo puedo hacer esto fácilmente?iOS: identifica qué UIViewController se mostró anteriormente en un UINavigationController
Respuesta
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.
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];
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.
- 1. programación añadir UINavigationController en UIViewController
- 2. Reemplazar un UIViewController en la jerarquía UINavigationController
- 3. Agregar UINavigationController a UIViewController existente
- 4. ¿Cómo funcionan UINavigationController y UIViewController?
- 5. Cargar un UINavigationController como una subvista desde UIViewController
- 6. Cambios en la orientación de UIViewController en una pila UINavigationController
- 7. iOS: ¿Cómo reconocer que obtuvimos de un niño UIViewController dentro del Parent UIViewController?
- 8. ¿Qué es un UIViewController
- 9. ¿UIViewController o UINavigationController configuran el tamaño de su vista?
- 10. iOS: ¿UIView pertenece a un UIViewController?
- 11. supportedInterfaceOrientations no funciona en iOS 6 UIViewController
- 12. loadView de UIViewController no se llama
- 13. ¿Cuándo debería usar un UIViewController en la Programación IOS?
- 14. Ejecutando un UINavigationController modal
- 15. ¿Por qué se está liberando demasiado? UINavigationController/UITableView
- 16. El título UINavigationController no se muestra?
- 17. UINavigationController-Alike para Desktop-Cocoa?
- 18. ¿Cómo se identifica * qué * dispositivo bluetooth provoca una transmisión ACTION_ACL_CONNECTED?
- 19. Obtener el máximo UIViewController
- 20. Eliminar texto que se agregó anteriormente
- 21. UINavigationController Force Rotate
- 22. ¿Cómo reinicio un UINavigationController?
- 23. UIViewController informó que respondía a addChildViewController: en iOS 4
- 24. ¿Cuándo se llama a UIViewController viewDidUnload?
- 25. interacción NSThread y UIViewController
- 26. DialogViewController rompe la ruta UINavigationController
- 27. Agregando un UINavigationController como una subvista de UIView
- 28. iOS: UISplitViewController no puede ser empujado a UINavigationController
- 29. Problemas con UINavigationController dentro de UITabBarController, viewWillAppear no se llama
- 30. Cómo encontrar Root UIViewController
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é) –
@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