2011-04-25 20 views
7

Duplicar posible:
ViewController not responding to didRotateFromInterfaceOrientationdidRotateFromInterfaceOrientation no se activa al rotar?

Tengo problemas con el método didRotateFromInterfaceOrientation no disparar en una de mis subclases viewcontroller.

Tengo una aplicación para iPad con UISplitViewController como vista principal. En el lado del detalle, estoy usando un controlador de navegación "oculto" (sin barra de herramientas, barra de navegación) para la conmutación de vista perezosa. El ViewController que quiero capturar didRotateFromInterfaceOrientation on tiene dos niveles de profundidad en la jerarquía de navcontroller. (Nada de esto debería hacer una diferencia, pero estoy incluyendo esta información en caso de que haya algún caso particular que no sé acerca)

que tengo:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

// This doesn't work. :(
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    NSLog(@"Rotate Go!"); 
} 

La vista gira muy bien, pero didRotateFromInterfaceOrientation nunca se dispara.

¿Alguna idea de lo que me estoy perdiendo?

+0

¿Tiene un uitabbar? Porque si lo es, debe crear una clase uitabbar e implementar la "shouldAutorotateToInterfaceOrientation" en esta clase también, de modo que todos los demás controladores reciban el mensaje de rotación. –

+0

No. Estoy usando un UISplitViewController, con una UIToolbar y UINavigationController (con la barra de herramientas oculta, por lo que diferentes vistas comparten la otra barra de herramientas). Pero no UITabBar ... – DOOManiac

+0

De acuerdo con Apple, su UISplitViewController debe ser la vista raíz en la ventana de su aplicación. Puedes experimentar algo extraño si ese no es el caso. Comprueba este subproceso SO http://stackoverflow.com/questions/2734016/uisplitviewcontroller-doesnt-autorotate –

Respuesta

0

Bueno, nunca hizo entender por qué los hechos no estaban disparando, pero yo no encontrar una solución alternativa:

En los dos métodos UISplitViewController delegado, splitViewController:willHideViewController:withBarButtonItem:forPopoverController: y splitViewController:willShowViewController:invalidatingBarButtonItem:, estoy detectar si o no mi punto de vista es visible, y luego haciendo mi lógica de rotación aquí.

5

Si su UIViewController es un niño en alguna vista raíz, entonces IB no lo agrega como controlador secundario al controlador raíz de forma predeterminada. La forma más fácil de abordar esto es modificar su controlador raíz:

- (void)viewDidLoad 
{ 
    [super viewDidLoad];  
    [self addChildViewController:(UIViewController*) self.yourChildController]; 
} 

Esto debería hacer el truco. Ahora su controlador niño va a recibir tanto:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration; 

y

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation; 

mensajes.

+0

Gracias! Esto acaba de solucionar un problema que tuve con UISplitViewController al no obtener eventos de rotación. – cberkley

Cuestiones relacionadas