2012-10-10 1 views
7

Für meine App rootViewController ist navgationController.iOS 6 - (BOOL) shouldAutorotate nicht für Navigationssteuerungen aufgerufen pushed viewControllers

fand ich, dass Controller

des geschoben

-(BOOL)shouldAutorotate nicht genannt zu werden.

und

-(NSUInteger)supportedInterfaceOrientations erhalten nur einmal aufgerufen.

Ich habe in xcode's Projektübersicht (oder plist) für Windows alle Orientierungsunterstützung korrekt überprüft.

Ich möchte diese Methode aufgerufen werden, da gibt es einige uicontrol Positionierungscode, die ich programmatisch für Orientierungsänderung ausführen möchte.

löste ich dieses Problem durch zwingende (Kategorie)

-(BOOL)shouldAutorotate; 

-(NSUInteger)supportedInterfaceOrientations; 

Ich habe folgende Methoden der Navigation-Controller, welcher Controller gedrückt zu werden und rief entsprechend jeweiligen uicontrol Positionierung Code des geschoben Controller in folgenden Verfahren der Navigation Controller

(NSUInteger)supportedInterfaceOrientations; 

Das funktioniert gut, aber ich denke nicht, dass dies der richtige Weg ist. Bitte helfen Sie mir für eine bessere Lösung.

+0

In meinem Fall (wie ich http://stackoverflow.com/questions/12610132/multiple-uiinterfaceorientations-app-with-ios-6 geschrieben) war ich nicht in der Lage um mit presentModalViewControllers umzugehen, aber der pushViewController funktionierte gut – jMelnik

Antwort

0

Sie können über

[UIApplication sharedApplication].statusBarOrientation 

für die Schnittstelle Ausrichtung überprüfen, wenn die View-Controller geladen wird, sagen wir, in viewWillAppear. Dort können Sie Ihr Layout von Unteransichten erstellen. Sobald die Ansicht geöffnet ist, wird shouldAutorotate aufgerufen, sobald das Gerät eingeschaltet wird.

+0

Aber beachten Sie supportInterfaceOrientations wird nur einmal aufgerufen –

+0

Nein, sorry. Ich habe das gerade an einem neuen Projekt getestet. Immer wenn ich mich umwende, werden beide Methoden genau einmal aufgerufen. – Mundi

0

Das Überschreiben von UINavigationController ist der richtige Ansatz, aber ich bin mir nicht sicher, ob Sie die unterstützten interfaceOrientations von Push-Controllern auf die richtige Weise überprüfen.

Blick auf meine Antwort hier: https://stackoverflow.com/a/12669343/253008

+0

Nein Ich überprüfe die Push-Controller unterstütztenInterfaceOrientations den richtigen Weg. Alles funktioniert wie erwartet. Ich möchte nur wissen, gibt es eine andere Alternative für die Lösung, die ich gefunden habe (überschreiben Methoden), so dass Push-Controller - (BOOL) sollteAutorotate; - (NSUInteger) supportedInterfaceOrientations; wird automatisch aufgerufen, wenn sich die Ausrichtung ändert. So kann ich überprüfen, welcher Controller gedrückt wird, und seinen UIControl-Repositionscode entsprechend von der überschriebenen Methode aufrufen. Dieser UIControl-Repositionierungscode ist bereits in den Orientierungsmethoden der Controller enthalten. –

27

Sie auf den folgenden Link überprüfen können, müssen Sie eine benutzerdefinierte Navigation erstellen, um durch Auto

http://mobileappdevpage.blogspot.in/2012/11/how-to-use-should-autorotateios-6-with.html

Der andere Weg, dies zu drehen tun können, unterstützen sollte Erstellen Kategorie von UINaviagationController

Code für .h-Datei ist

@interface UINavigationController (autorotation) 

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

und Code für .m-Datei ist

@implementation UINavigationController (autorotation) 

-(BOOL)shouldAutorotate 
{ 

    UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation; 
    [self.topViewController shouldAutorotate]; 
    return YES; 

} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAll; 

} 
@end 
+0

Es ist sehr sehr nützlich Beitrag für mich. Danke yaar –

+0

schön ich auch gelöst Problem mit diesem Dank ... –

+0

@iMobile und Neel danke –

1

ich auch das gleiche Problem mit dem Navigationscontroller konfrontiert.Es funktioniert gut, im Falle aller geschoben View-Controller, aber mein Szenario war ganz anders ich ein Viewcontroller musste die Navigationssteuerung gedrückt (ViewControllerParent) als Wurzel,

NavController 
      -- rootViewController (ViewControllerParent) 
              --- ViewControllerChild1 
              --- ViewControllerChild2 

Aufgrund einiger Projektanforderung, ich Ich habe das ViewControllerParent als Basis beibehalten und dann habe ich die Ansicht von Child ViewController als Unteransichten zum Eltern basierend auf Benutzeraktionen hinzugefügt. Jetzt hatte ich ein Szenario, in dem ich wollte, dass Child1 nicht rotierte und Child2 eine Rotation hatte.

Das Problem, dem ich gegenüberstand, war, dass mein [self.topViewController] in der Navigationssteuerungsklasse immer das Elternobjekt zurückgibt, da ich die Childs nicht in den Nav-Stapel schiebe. Also werden meine shouldAutorotate-Methoden in meinem Childs nie aufgerufen werden. Also musste ich die Methode shouldAutorotate meiner Elternklasse einchecken und dann den Rotationswert zurückgeben. Ich habe so etwas wie dies in Elternklasse (ViewControllerParent), es ist eine Art von Problem zu umgehen, aber es das Problem behoben

-(BOOL)shouldAutorotate 
{ 
    BOOL allowRotation = YES; 

    if ([currentlyLoadedChild isKindOfClass:[Child1 class]]) 
    { 
     allowRotation = NO; 
    } 
    if ([currentlyLoadedChild isKindOfClass:[Child2 class]]) 
    { 
     allowRotation = YES; 
    } 
    return allowRotation; 
} 

-anoop

0

ich hatte das gleiche Problem. überprüfen this answer sein eine große approauch anstatt Anwendung ShouldAutoRotate