Vine a SO en busca de una solución más elegante, pero así es como he estado (con éxito) haciéndolo hasta ahora.
La idea básica:
- no utilice UINavigationController; en lugar de utilizar sus partes constituyentes (por ejemplo UINavigationBar) y hacer el trabajo usted mismo
- Gatillo la barra de navegación para animar en paralelo con sus propias animaciones personalizadas (o no, si no desea anim en absoluto)
Las desventajas:
- UINavigationController maneja algunas otras cosas, como la carga/descarga de memoria, automáticamente. Además, está "codificado" en todos los UIViewControllers, SIEMPRE tienen una referencia al UINavigationController que los contiene. Es una pena desperdiciar todo esto solo porque Apple no proporciona un gancho para configurar anims personalizados.
Código - en cualquier clase se hace cargo de la animación:
UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
[navigationController.navigationBar pushNavigationItem:backItem animated:TRUE];
// next line only needed if you want a custom back anim too
navigationController.navigationBar.delegate = self;
... si también desea cortar en la espalda con la costumbre de animación, es necesario que la última línea anterior, de modo que usted puede entonces escuchar la barra de navegación, y reaccionar en paralelo, así:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
// trigger your custom back animation here
return TRUE;
}
¿Por qué quiere romper la interfaz de usuario con un comportamiento no estándar? –
No es que quiera romper la UI con un comportamiento no estándar. Simplemente no entiendo por qué el SDK tiene control para un impulso para ser animado o no, pero no tiene el mismo control para un pop. Siento que es inconsistente. –
comportamiento no estándar nos hace crecer :) – Zac