ios objective-c viewwillappear

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.