Tengo un UITabBarController, y cada pestaña maneja un UIViewController diferente que empuja a la pila a los nuevos controladores según sea necesario. En dos de estas pestañas necesito, cuando se alcanza un controlador específico, la capacidad de rotar el iPhone y visualizar una vista en modo horizontal. Después de luchar mucho, he encontrado que es obligatorio subclasificar UITabBarController para anular shouldAutorotateToInterfaceOrientation. Sin embargo, si simplemente devuelvo SÍ en la implementación, aparece el siguiente efecto secundario indeseable:tabBarController y navigationControllers en modo apaisado, episodio II
cada controlador en cada pestaña se pone automáticamente en modo horizontal cuando se gira el iPhone.
Incluso anulando shouldAutorotateToInterfaceOrientation en cada controlador para devolver NO no funciona: cuando se gira el iPhone, el controlador se pone en modo horizontal.
he implementado shouldAutorotateToInterfaceOrientation como sigue en el UITabBarController subclases:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if([self selectedIndex] == 0 || [self selectedIndex] == 3)
return YES;
return NO;
}
de modo que sólo las dos lengüetas estoy realmente interesado en obtener apoyo para el modo horizontal. ¿Hay alguna manera de admitir el modo horizontal para un controlador específico en la pila de una pestaña determinada?
he intentado, sin éxito, algo así como
(BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {
if([self selectedIndex] == 0 || [self selectedIndex] == 3)
{
if ([[self selectedViewController] isKindOfClass: [landscapeModeViewController class]])
return YES;
}
return NO;
}
Además, he intentado usar el método delegado didSelectViewController, sin éxito . Cualquier ayuda es muy apreciada. Gracias.
Rich, muchas gracias. La solución propuesta funciona como un encanto ;-) ¡Este problema me estaba volviendo loco! No me di cuenta de que la forma correcta de hacerlo también requiere verificar simultáneamente el visibleViewController. ¡Gran respuesta! –