2012-09-21 26 views
8

Quiero que varios de los controladores de vista de mi aplicación no roten en iOS 6.0. Esto es lo que hice para que la rotación en IOS 6 posibles:iOS 6 ViewController está girando pero no debería

1.) Establecer la RootViewController ventanas de aplicación: didFinishLaunchingWithOptions:

self.window.rootViewController = self.tabBarController; 

2.) Establecer las "Orientaciones admitidas interface" en mi Target (en XCode) para que pueda utilizar todas las orientaciones

3.) implementó el nuevo iOS funcionalidad rotación 6,0

- (BOOL) shouldAutorotate { 

    return YES; 
} 


-(NSUInteger)supportedInterfaceOrientations{ 

    return UIInterfaceOrientationMaskAll; 
} 

4.) Por alguna razón, clasifiqué el UINavigationController e implementé también estas nuevas funcionalidades y usé este nuevo NavigationController en lugar del original.

Hasta ahora todo va bien y todos los controladores de vista ahora pueden girar en cualquier orientación. Ahora quiero que viewController no gire y solo permanezca en vertical. Pero cuando me puse los nuevos métodos de rotaciones en aquellos viewcontrollers específicos como éste, todavía gira para todas las orientaciones:

- (BOOL) shouldAutorotate { 

    return NO; 
} 


-(NSUInteger)supportedInterfaceOrientations{ 

    return UIInterfaceOrientationMaskPortrait; 
} 

ajuste también rotationsfunctionality del navigationController como la de arriba no cambia nada. (Todos los controladores de vista pueden girar en cada orientación)

¿Qué estoy haciendo mal?

EDIT:

también Ajuste de las Interfaceorientation preferido no cambia nada:

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation { 

    return UIInterfaceOrientationMaskPortrait; 
} 

Respuesta

11

Si desea que todos nuestros controladores de navegación de respetar el controlador de vista superior puede usar una categoría. Lo encontré más fácil que crear subclases.

@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 
+0

¡Gracias, esto resolvió mi problema! – NicTesla

+5

Tenga cuidado con esta solución: si el método soportado InterfaseOrientaciones del controlador de vista llama a lasOfientaciones de interfaz admitidas en el controlador de navegación entonces tiene recursión infinita. He encontrado la manera difícil en que UIPrintingProgressViewController de apple le pregunta al controlador de navegación por supportedEnterfaceOrientations ... – tyler

+0

@tyler ¿Cómo nos ocupamos de eso? La impresión da como resultado una recursión infinita.No puedo arreglarlo de todos modos. Utilicé la categoría anterior para la rotación de controladores de vista específicos en mi aplicación. –

0

Esto funciona para mí:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return NO; 
} 
+2

Gracias por su respuesta rápida, pero este método está desprotegido en iOS 6. En iOS 6, debe utilizar los dos métodos shouldAutorotate y supportedInterfaceOrientations en su lugar. – NicTesla

0

lo necesario para crear la categoría de UITabBarController para apoyar debe girar automática

código del archivo .h es tan

@interface UITabBarController (autoRotate)<UITabBarControllerDelegate> 

    -(BOOL)shouldAutorotate; 
    - (NSUInteger)supportedInterfaceOrientations; 

@end 

código del archivo .m es tan

-(BOOL)shouldAutorotate { 

    AppDelegate *delegate= (AppDelegate*)[[UIApplication sharedApplication]delegate]; 
    return [delegate.tabBarController.selectedViewController shouldAutorotate]; 
} 


- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskAll; 
} 

Nota: El nombre de AppDelegate se cambiará con el nombre del archivo AppDelegate de su proyecto.

+0

Las respuestas de Link Only no son bienvenidas en StackOverflow. –

+0

Spammy, enlaces autopromocionales tampoco son bienvenidos en Stack Overflow. –

Cuestiones relacionadas