2012-08-29 11 views
5

Estoy usando iOS 6.0 beta y mis rotaciones ya no funcionan.¿Dónde puedo establecer UINavigationControllers supportedOrientations?

¿Dónde puedo establecer un UINavigationControllers supportedOrientations?

De acuerdo con este http://news.yahoo.com/apple-ios-6-beta-3-changes-182849903.html un controlador de UINavigation no consulta a sus hijos para determinar si deben autorrotar.

No estoy usando shouldAutorotateToInterfaceOrientation: ya que está en desuso. En su lugar, estoy usando supportedInterfaceOrientations: y shouldAutoRotate: y funcionan bien hasta que coloque un ViewController en un NavigationController (como un elemento secundario). A partir de ese momento las orientaciones especificadas en ViewController ya no funcionan. Parece que está usando las orientaciones establecidas por el mando de navegación (UIInterfaceOrientationMaskAllButUpsideDown)

¿Cómo se establecen los InterfaceOrientations para el NavigationController para que mis ViewControllers se bloquean en orientación retrato?

¿Debo hacer una subclase UINavigationController y establecer las InterfaceOrientations allí? ¿No es una mala práctica subclasificar a UINavigationController aún en iOS 6.0?

Gracias por su ayuda montones!

¡Salud!

Respuesta

4

Subclase UINavigationController

//OnlyPortraitNavigationController.h

@interface OnlyPortraitNavigationController : UINavigationController 

//OnlyPortraitNavigationController.m

@implementation OnlyPortraitNavigationController 

- (BOOL)shouldAutorotate { 
    return NO; 
} 

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationPortrait; //for locked only Portrait 
} 

presente nueva subclase navigationController con su retrato ViewController

SomeViewController *onlyPortraitVC = [[SomeViewController alloc]init]; 

OnlyPortraitNavigationController *portraitNav = [[OnlyPortraitNavigationController alloc]initWithRootViewController:onlyPortraitViewController]; 

[self presentViewController:portraitNav animated:YES completion:NULL]; 

esto es trabajo en mi aplicación espero que pueda ayudarlo.

+0

funciona bien para mí, así, gracias. –

9

Si usted quiere que consulte a su vez los niños se puede añadir una categoría a UINavigationController

@implementation UINavigationController (Rotation_IOS6) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; 
} 

@end 
+5

En general, es una mala idea usar categorías para anular los métodos de una clase, especialmente uno que está integrado en el sistema operativo. Crea una subclase en su lugar. –

+2

Estoy de acuerdo con eso ... al final depende de su situación. Esto ciertamente pretende ser una solución rápida de compatibilidad para un proyecto grande. – Anthony

+1

¿Por qué es esta una mala idea? Es el único que me ha funcionado hasta ahora y fue fácil de configurar. Lo puse en mi UITabBarController y viola, puedo controlar las rotaciones de todas mis vistas. –

Cuestiones relacionadas