ios - ¿Puedo saber en viewWappAppear que fue llamado después de navigationController pop(botón atrás)?
objective-c viewwillappear (3)
Digamos que tengo UIViewController
A y B. El usuario navega de A a B con una secuencia de empuje. Que el usuario presiona el botón Atrás y llega a A.
Ahora se llama viewWillAppear
of A. ¿Puedo saber en el código aquí que vine desde el botón Atrás ( navigationController popTo...
) y no de otra manera? Y sin escribir código especial en el controlador B view.
Agregue una propiedad BOOL a UIViewController
A:
@property (nonatomic) BOOL alreadyAppeared;
Luego, en su viewWillAppear:
método, agregue:
if (!self.alreadyAppeared) {
self.alreadyAppeared = YES;
// Do here the stuff you wanted to do on first appear
}
Me gusta hacer lo siguiente en la vista del controlador A:
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (_popping) {
_popping = false;
NSLog(@"BECAUSE OF POPPING");
} else {
NSLog(@"APPEARING ANOTHER WAY");
}
//keep stack size updated
_stackSize = self.navigationController.viewControllers.count;
....
}
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
_popping = self.navigationController.viewControllers.count > _stackSize;
....
}
Lo que está haciendo es hacer un seguimiento de si su controlador de vista (A) está desapareciendo porque se está empujando un controlador de vista (B) o por otro motivo. Luego (si no modificó el orden del controlador de vista secundaria) debería indicarle con precisión si (A) aparece debido a un elemento emergente en el controlador de navegación.
hm, tal vez puede usar self.isMovingToParentViewController
en viewWillAppear
, vea docs , si es NO
entonces significa que el controlador de vista actual ya está en la pila de navegación.