2012-08-29 3 views
5

Ich verwende iOS 6.0 Beta und meine Rotationen funktionieren nicht mehr.Wo kann ich eine UINavigationControllers supportedOrientations setzen?

Wo kann ich eine UINavigationControllers supportedOrientations setzen?

Entsprechend dieser http://news.yahoo.com/apple-ios-6-beta-3-changes-182849903.html ein UINavigation Controller ihre Kinder nicht konsultieren, um festzustellen, ob sie automatisch drehen sollen.

Ich verwende nicht shangAutorotateToInterfaceOrientation: mehr als es veraltet ist. Stattdessen verwende ich supportedInterfaceOrientations: und sollteAutoRotate: und sie funktionieren gut, bis ich einen ViewController in einem NavigationController (als Kind) platzieren. Von da an funktionieren die im ViewController angegebenen Orientierungen nicht mehr. Es scheint es die Orientierungen durch die Navigationssteuerung (UIInterfaceOrientationMaskAllButUpsideDown)

gesetzt Wie kann ich die InterfaceOrientations für die Navigation so eingestellt, dass mein Viewcontrollers zu Portrait-Ausrichtung gesperrt ist?

Muss ich UINavigationController ableiten und die InterfaceOrientations dort einstellen? Ist es nicht schlecht, UINavigationController noch in iOS 6.0 abzuleiten?

Danke für Sie helfen haufen!

Prost!

Antwort

4

Subclass UINavigationController

//OnlyPortraitNavigationController.h

@interface OnlyPortraitNavigationController : UINavigationController 

//OnlyPortraitNavigationController.m

@implementation OnlyPortraitNavigationController 

- (BOOL)shouldAutorotate { 
    return NO; 
} 

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

präsentieren neue Unterklasse Navigation mit Ihrem Porträt Viewcontroller

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

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

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

das ist Arbeit an meiner App hoffe, es kann Ihnen helfen.

+0

funktioniert auch mir gut, danke. –

9

Wenn Sie es es erneut zu konsultieren, wollen Kinder Sie eine Kategorie UINavigationController hinzufügen

@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

Es ist im Allgemeinen eine schlechte Idee, Kategorien zu verwenden, um die Methoden einer Klasse zu überschreiben, insbesondere eine, die in das Betriebssystem eingebaut ist. Erstellen Sie stattdessen eine Unterklasse. –

+2

Dem würde ich zustimmen ... am Ende kommt es auf Ihre Situation an. Dies ist sicherlich eine schnelle Kompatibilitätslösung für ein großes Projekt. – Anthony

+1

Warum ist das eine schlechte Idee? Es ist das einzige, was bisher für mich funktioniert hat und es war einfach einzurichten. Ich lege es in meinen UITabBarController und Viola, ich kann die Drehungen all meiner Ansichten kontrollieren. –