2012-05-10 12 views
9

Escenario en un iPhone:Obtener UINavigationBar delegado para permitir "atrás", con una bonita animación

El usuario pulsa el botón de retroceso, el método UINavigationBar delegado (implementado en una subclase de UINavigationController) devuelve YES, así:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    // Verify stuff... 

    return YES; 
} 

Ahora, de acuerdo con el docs, es responsabilidad de la aplicación para mantener la barra de navegación y los contenidos en sincronía, y el lugar para hacerlo es en el método delegado

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item 

El problema es que didPopItem solo se llama después de que la secuencia de animación pop de la barra de navegación haya finalizado, así que si llamo allí al [self popViewControllerAnimated: NO], el resultado neto es que primero la barra de navegación se desliza hacia atrás, luego el contenido.

Y eso sólo se ve mal.

Si llamo al pop... del controlador de navegación en el método delegado shouldPop..., aparece un mensaje de error que dice que superpongo animaciones y el estado final no está limpio.

Entonces mi pregunta es, ¿hay alguna otra manera de hacer que el UINavigationController cambie el contenido, preferiblemente con una buena animación sincronizada con la barra de navegación, pero sin crear confusión entre la barra de navegación y el controlador de navegación?

OS

El objetivo iOS 4.2 y posteriores.

Soy consciente de que podría simplemente crear otro botón izquierdo en lugar del botón Atrás, pero lo encontré más limpio para usar un delegado, además, obtengo un botón de retroceso "real", que es lo que quiero.

+0

Y u desee llamar a didPopItem Método secuencia de animación antes del estallido de la barra de navegación u tenía como escritor de tercera paragrah..What u wana hacer u puede por favor haga es claro su tercer paragh, ¿cuál es su pregunta principal? –

+1

¿Por qué está utilizando una barra de navegación separada con un 'UINavigationController' en lugar de usar la que proporciona? – Greg

Respuesta

3

Si está utilizando un UINavigationController, que no es necesario para manejar esto por sí mismo. Se ahorrará muchos problemas simplemente usando el UINavigationController. Se ocupará de mostrar la vista de contenido junto con los elementos de la barra de navegación.

1

Prueba esto:

Imagine que tiene viewControllerA y viewControllerB. viewControllerA es el primero y no necesita una navigationBar y viewControllerB.

En el método viewWillAppear en viewControllerA poner el código:

[self.navigationController setNavigationBarHidden:YES animated:YES]; 

y cuando hacer estallar la viewControllerB lo hace con la animación. Ambas animaciones estarán sincronizadas automágicamente.

No sé si esto es válido para iOS4.2

Cuestiones relacionadas