bar uinavigationcontroller uigesturerecognizer ios7 lifecycle

uinavigationcontroller - uinavigationbar ios



Ver el ciclo de vida del controlador cuando se desliza para saltar desde UINavigationController en iOS7 (3)

¡Buena publicación!

Como dices, ya no puedes usar viewWillDisappear y el ''truco'' como lo describiste, pero en cambio esto funciona bien para mí en iOS7 para atrapar el botón Atrás .

- (void)viewDidDisappear:(BOOL)animated { if (self.isMovingFromParentViewController == YES) { // Do the tidy up as before.... } }

Espero que esto ayude a alguien.

¿Cuál es el impacto del nuevo gesto de deslizar al pop de iOS 7 en el ciclo de vida del controlador de vista de UINavigationController ?


Lo nuevo en iOS 7 es un gesto de UINavigationController pop en UINavigationController ; puede deslizar el dedo de izquierda a derecha para hacer lo que normalmente se hace con el botón Atrás. Lo que hay que tener en cuenta es que la transición pop es cancelable .

Al presionar el botón Atrás sigue funcionando de la forma que esperaría:

  1. El usuario pulsa el botón Atrás
  2. viewWillDisappear se llama
  3. Se llama viewDidDisappear
  4. Se lanza el controlador popped

Completar un barrido a pop es como presionar el botón Atrás

  1. El usuario comienza a deslizar de izquierda a derecha
  2. viewWillDisappear se llama
  3. El usuario completa el gesto de deslizar
  4. Se llama viewDidDisappear
  5. Se lanza el controlador popped

Un swipe-to-pop cancelado funciona así.

  1. El usuario comienza a deslizar de izquierda a derecha
  2. viewWillDisappear se llama
  3. El usuario cancela el gesto de deslizamiento (invirtiéndolo o no arrastrando lo suficiente hacia la derecha)
  4. Se llama viewWillAppear
  5. Se llama viewDidAppear

Actualice sus expectativas y los métodos de ciclo de vida de su vista en consecuencia.

Es de destacar que se llama a viewWillDisappear en todos los casos, incluso si el usuario cancela el gesto emergente. Esto puede ser una mentira; Si se cancela el gesto de deslizar al pop, su vista no va a desaparecer, ¿verdad?

Como todos nosotros, me esfuerzo por equilibrar las llamadas addObserver/removeObserver en mi aplicación para evitar bloqueos. viewWillAppear/viewWillDisappear métodos del ciclo de vida del controlador de la vista. Además, me he basado en este truco para determinar si un controlador de vista está a punto de ser extraído de la pila de un controlador de navegación y posteriormente ser liberado, de modo que pueda saber cuándo y cuándo debo derribar a mis observadores.

iOS 7 ha complicado este patrón. Ya no puedo confiar en que se viewWillDisappear un controlador de vista cuando se llama a viewWillDisappear . Tengo que esperar que pueda dar la vuelta, gritar "es broma" y proceder a llamar a viewWillAppear/viewDidAppear nuevamente.


Mi situación era ligeramente diferente. Estoy anulando popViewControllerAnimated en una clase de navigationController personalizada. En el popViewControllerAnimated, pude detectar que se estaba produciendo un pop al arrastrar cuando

self.interactivePopGestureRecognizer.state == UIGestureRecognizerStatePossible