UINavigationControllerDelegate métodos no invocados al mostrar a un controlador de vista que no admite la orientación actual.UINavigationControllerDelegate métodos no llamados (código de demostración en github)
Tengo un UINavigationController como controlador de vista raíz de mi aplicación (controlador de vista inicial en mi Storyboard).
Digamos que empujo una ViewController A con esta orientación:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
De ahí que no son compatibles con cualquier modo de paisaje. Además de eso vamos a empujar otra ViewController con código:
@interface B : UIViewController <UINavigationControllerDelegate>
@end
@implementation B
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES; // any orientation supported
}
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *nc = (UINavigationController*)appDelegate.window.rootViewController;
nc.delegate = self;
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// not always called...
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// not always called...
}
@end
Ahora bien, si tengo mi iPhone en el retrato y empujo vista controlador B en la parte superior de A, a través de algún suceso táctil, a continuación, toque el botón "atrás" en la barra de navegación, todo está bien y se llaman los métodos de delegado (hago algunas cosas ahí).
Pero si, cuando estoy viendo la vista B, giro a horizontal, y luego presiono el botón Atrás, esos métodos de delegado no se llaman !! ¿Cuál es el punto de establecer un delegado para el UINavigationController si los métodos se llaman a veces pero no a otro? Seguramente estoy haciendo algo mal.
Intento poner al delegado en otra clase, como AppDelegate o mi MainView, nada cambia.
¿Alguna idea?
código de demostración aquí:git://github.com/malaba/NavBarTest.git
partir de una plantilla básica Maestro-Detalle, modificado al igual que anteriormente.
¿Cómo mostrar mi punto? Aquí está el paso a paso-:
- Añadir alguna línea en la vista maestra (la parte superior + derecha)
- continuación, toque una línea para ir a la vista de detalles
- Ver Acceder salida a aparecer
- Botón Volver atrás (etiquetado como "Maestro"), nuevamente se muestra el registro.
Ahora intenta girar el iPhone (o simulador) en la vista de detalles, y luego ir "atrás" y ver ningún registro aparecer ?!
¿Qué es este lenguaje? Obj-C++ ?? Estoy traduciendo ahora ... – malaba
Es C#, usando MonoTouch. –