Necesito hacer ciertas cosas cuando mi controlador de vista es empujado o extraído de la pila de navegación, pero no quiero usar viewillappear/viewdidappear o viewwill desaparecer/viewdid desaparecer ya que esos casos cubren además cuando el controlador de vista es empujado/reventado. Es la forma correcta de hacerlo para usar el delegado de navigationcontroller y el navigationController: didShowViewController: animated: y navigationController: willShowViewController: animated:? Si no, ¿cómo es la mejor manera de hacerlo?Cómo recibir una alerta cuando uiviewcontroller es empujado/extraído de la pila de navegación
Respuesta
Para saber cuando es empujado, se puede utilizar el
UINavigationControllerDelegate
e implementar
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
Este método se disparará cuando el viewcontroller se empuja en la pila de navegación, y cada vez que el controlador de vista en la parte superior se apaga, lo revela de nuevo. Entonces, debes usar una bandera para descubrir si se ha inicializado aún, si no es así, significa que simplemente se presionó.
Para saber cuando ha sido apareció, utilice esta respuesta:
Puede probar los métodos delegados UINavigationController que llama cuando el objeto empuja o extrae desde la pila del controlador de navegación.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
siempre puede crear una subclase simple de los UINavigationController y envolver los métodos de su superclase de manera que se establece una bandera antes de llamar a ellos:
ActionNavigationController.h
#import <UIKit/UIKit.h>
@interface ActionNavigationController : UINavigationController
@property (nonatomic, readonly) BOOL pushing;
@end
ActionNavigationController.m
#import "ActionNavigationController.h"
@implementation ActionNavigationController
@synthesize pushing = _pushing;
-(void)pushViewController:(UIViewController *)viewController
animated:(BOOL)animated {
_pushing = YES;
[super pushViewController:viewController animated:animated];
}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
_pushing = NO;
return [super popViewControllerAnimated:animated];
}
- (NSArray *)popToViewController:(UIViewController *)viewController
animated:(BOOL)animated {
_pushing = NO;
return [super popToViewController:viewController animated:animated];
}
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated {
_pushing = NO;
return [super popToRootViewControllerAnimated:animated];
}
@end
Como pushing
evaluará a NO
evento si no pasa nada, se espera que este código para acceder desde el UINavigationControllerDelegate.
He aquí un ejemplo para detectar cuando un controlador de vista se inserta en la pila de navegación anulando -viewWillAppear:
y se metió anulando -viewWillDisappear:
-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (self.isMovingToParentViewController) {
NSLog(@"view controller being pushed");
}
}
-(void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (self.isMovingFromParentViewController) {
NSLog(@"view controller being popped");
}
}
Usted puede hacer algo así en willShowViewController
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
if self.navigationController!.viewControllers.contains(self){
print ("push")
} else {
print ("pop")
}
}
Tenga cuidado de usar
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
Si golpe de usuario desde el borde hacia la derecha para hacer estallar controlador de vista (y en realidad no lo pop), se invocará por encima de la función de delegado, pero no por debajo de la función
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated;
Por favor refiérase a https://gist.github.com/nonamelive/9334458
- 1. ¿Cómo puedo mostrar una barra de pestañas cuando se empuja un UIViewController en la pila de navegación
- 2. Cambios en la orientación de UIViewController en una pila UINavigationController
- 3. ¿Cómo puedo recibir una alerta cuando una instancia de EBS se está quedando sin espacio?
- 4. eliminar una página de navegación Pila
- 5. ¿Cómo puedo crear una pila de navegación global?
- 6. cómo ocultar la barra de navegación cuando presiono desde el controlador de navegación?
- 7. No se puede ocultar el teclado en la pila UIViewController cuando UIAlertView está en la pantalla
- 8. Cómo recibir una notificación cuando NSWindow se cierra
- 9. UINavigationController problemas de la pila de navegación en modo horizontal
- 10. ¿Cómo saber si un UIViewController es el controlador de la vista raíz?
- 11. ¿Cómo funcionan UINavigationController y UIViewController?
- 12. ¿Cómo saber de dónde proviene la alerta?
- 13. Cómo recibir un mensaje de alerta antes de redirigir una página
- 14. que hace estallar a una viewcontroller específico en una pila de navegación
- 15. Recibir correo electrónico en TFS cuando tengo una nueva tarea
- 16. Desarrollo de iOS: ¿cómo puedo precargar un controlador de vista antes de insertarlo en la pila de navegación?
- 17. Cómo recibir una notificación cuando se notifica una notificación
- 18. ningún mensaje de alerta cuando document.ready - jQuery
- 19. ¿Cómo definir una pila de pila?
- 20. ¿Por qué UIImagePickerController no se puede insertar en la pila de navegación?
- 21. ¿Cómo recibir notificaciones de una vista emergente en UINavigationController?
- 22. Cómo saber si la vista de UIViewController es visible
- 23. iOS: ¿Cómo reconocer que obtuvimos de un niño UIViewController dentro del Parent UIViewController?
- 24. ¿Cómo recibir notificaciones cuando una ventana se enfoca en WPF?
- 25. Recibir una notificación cuando se selecciona la pestaña actual nuevamente
- 26. Alerta de correo electrónico cuando la compilación falla en CruiseControl.Net
- 27. ¿Cómo recibir notificaciones cuando finaliza una construcción exitosa?
- 28. UIViewController: detección de desgloses y profundización
- 29. ¿Cómo obtengo la barra de navegación en un UINavigationController para actualizar su posición cuando la barra de estado está oculta?
- 30. Es una pila falsa más rápida que una pila real
'Overriding' es un tanto mejor palabra. – noob