2012-09-21 11 views
8

Ich möchte, dass einige meiner App-Viewcontroller nicht in iOS 6.0 rotieren. Diese ist, was ich die Rotation in iOS 6 möglich zu machen tat:iOS 6 ViewController dreht sich, sollte aber nicht

1.) Legen Sie die Fenster RootViewController in der Anwendung: didFinishLaunchingWithOptions:

self.window.rootViewController = self.tabBarController; 

2.) Stellen Sie die "Unterstützte Schnittstelle Orientations" in meinem Target (in XCode), so kann ich alle Orientierungen

3.) Implementiert verwenden die neuen iOS 6.0 Rotation Funktionalität

- (BOOL) shouldAutorotate { 

    return YES; 
} 


-(NSUInteger)supportedInterfaceOrientations{ 

    return UIInterfaceOrientationMaskAll; 
} 

4.) Aus irgendwelchen Gründen habe ich den UINavigationController subclassiert und auch diese neuen Funktionalitäten implementiert und diesen neuen NavigationController anstelle des ursprünglichen verwendet.

So weit, so gut, alles funktioniert gut und alle Viewcontrollers sind jetzt in der Lage, zu jeder Orientierung zu drehen. Jetzt möchte ich mehrere ViewController nicht drehen und nur im Hochformat bleiben. Aber wenn ich die neuen Rotationen Methoden in diesen spezifischen Viewcontrollers wie folgt festgelegt, es dreht sich nach wie vor auf jede Orientierung:

- (BOOL) shouldAutorotate { 

    return NO; 
} 


-(NSUInteger)supportedInterfaceOrientations{ 

    return UIInterfaceOrientationMaskPortrait; 
} 

auch die Navigation der rotationsfunctionality Einstellung wie oben ändert nichts. (Alle Viewcontroller können sich in jede Richtung drehen)

Was mache ich falsch?

EDIT:

Auch die bevorzugte Interfaceorientation Einstellung ändert nichts:

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation { 

    return UIInterfaceOrientationMaskPortrait; 
} 

Antwort

11

Wenn Sie alle unsere Navigation Controller wollen respektieren Mit dem Top-View-Controller können Sie eine Kategorie verwenden. Ich habe es einfacher gefunden als Unterklassen.

@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

Danke, das hat mein Problem gelöst! – NicTesla

+5

Seien Sie vorsichtig mit dieser Lösung - wenn die Methode supportedInterfaceOrientations des View-Controllers support_InterfaceOrientations auf dem Nav-Controller aufruft, haben Sie eine unendliche Rekursion. Ich fand den harten Weg, dass apples UIPrintingProgressViewController fragt den Nav-Controller für supportedInterfaceOrientations ... – tyler

+0

@tyler Wie kümmern wir uns darum? Das Drucken führt zu einer unendlichen Rekursion.Ich kann es sowieso nicht reparieren. Ich habe die obige Kategorie für die Rotation bestimmter View-Controller in meiner App verwendet. –

0

Dies funktioniert für mich:

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

Vielen Dank für Ihre schnelle Antwort, aber diese Methode ist in iOS 6 entzogen. In iOS 6 sollten Sie stattdessen die beiden Methoden shouldAutorotate und supportedInterfaceOrientations verwenden. – NicTesla

0

Sie benötigen Kategorie von UITabBarController erstellen Auto zu unterstützen, sollten

Code von .h-Datei drehen ist wie

@interface UITabBarController (autoRotate)<UITabBarControllerDelegate> 

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

@end 

Code von .m-Datei als

ist
-(BOOL)shouldAutorotate { 

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


- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskAll; 
} 

Hinweis: Name von AppDelegate wird mit dem AppDelegate-Dateinamen Ihres Projekts geändert.

+0

Link-only-Antworten sind bei StackOverflow nicht erwünscht. –

+0

Spammy, selbstwerbende Links sind auf Stack Overflow ebenfalls nicht erwünscht. –

Verwandte Themen