¿Puedo saber en vista de que aparecería que se llamó después del control de navigation pop (button Atrás)?

Diga que tengo UIViewController A y B. El usuario navega de A a B con un push segue. Que el usuario presiona el button Atrás y llega a A.

Ahora viewWillAppear de A se llama. ¿Puedo saber en el código aquí que vengo del button Atrás ( navigationController popTo... ) y no de otra manera? Y sin escribir un código especial en el controller de vista B.

hm, tal vez puede usar self.isMovingToParentViewController en viewWillAppear , consulte docs , si es NO , significa que el controller de vista actual ya está en la stack de navigation.

Agregue una propiedad BOOL a UIViewController A:

 @property (nonatomic) BOOL alreadyAppeanetworking; 

Luego, en su vista, viewWillAppear: método, agregue:

 if (!self.alreadyAppeanetworking) { self.alreadyAppeanetworking = YES; // Do here the stuff you wanted to do on first appear } 

Me gusta hacer lo siguiente en el controller de vista 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 controller de vista (A) está desapareciendo porque un controller de vista (B) está siendo presionado o por otro motivo. Luego (si no modificó el order del controller de vistas secundarias), debería decirle con precisión si (A) está apareciendo debido a un pop en el controller de navigation.