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:
- El usuario pulsa el botón Atrás
-
viewWillDisappear
se llama - Se llama
viewDidDisappear
- Se lanza el controlador popped
Completar un barrido a pop es como presionar el botón Atrás
- El usuario comienza a deslizar de izquierda a derecha
-
viewWillDisappear
se llama - El usuario completa el gesto de deslizar
- Se llama
viewDidDisappear
- Se lanza el controlador popped
Un swipe-to-pop cancelado funciona así.
- El usuario comienza a deslizar de izquierda a derecha
-
viewWillDisappear
se llama - El usuario cancela el gesto de deslizamiento (invirtiéndolo o no arrastrando lo suficiente hacia la derecha)
- Se llama
viewWillAppear
- 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