iOS 6: Wie beschränke ich einige Ansichten auf das Hochformat und erlaube anderen, sich zu drehen?

Ich habe eine iPhone App, die a verwendetUINavigationController Darstellen einer Drilldown-Oberfläche: Erst eine Ansicht, dann eine weitere, bis zu vier Ebenen tief. Ich möchte, dass die ersten drei Ansichten auf Hochformat beschränkt sind und nur die letzte Ansicht in Querformat gedreht werden kann. Wenn ich von der vierten Ansicht zur dritten und vierten Ansicht im Querformat zurückkehre, möchte ich, dass sich alles wieder zum Hochformat dreht.

In iOS 5 habe ich einfach definiertshouldAutorotateToInterfaceOrientation: in jeder meiner Ansicht Controller JA für die zulässigen Ausrichtungen zurückzugeben. Alles funktionierte wie oben beschrieben, einschließlich der Rückkehr zum Hochformat, auch wenn das Gerät bei der Rückkehr vom View-Controller Nr. 4 zum Nr. 3 im Querformat gehalten wurde.

In iOS 6 drehen sich alle Ansichtscontroller in Querformat und brechen diejenigen auf, die nicht dazu gedacht waren. In den Versionshinweisen zu iOS 6 heißt es

Mehr Verantwortung geht auf die App und den App-Delegierten über. Jetzt können iOS-Container (wie zUINavigationController) fragen Sie ihre Kinder nicht, ob sie eine Autorotation durchführen sollen. [...] Das System fragt den obersten Vollbild-Ansichts-Controller (normalerweise den Stamm-Ansichts-Controller) nach den unterstützten Schnittstellenausrichtungen, wann immer sich das Gerät dreht oder wann immer einem Ansichts-Controller der modale Vollbild-Präsentationsstil präsentiert wird. Darüber hinaus werden die unterstützten Ausrichtungen nur abgerufen, wenn dieser Ansichts-Controller von seinem JA zurückgibtshouldAutorotate Methode. [...] Das System ermittelt, ob eine Ausrichtung unterstützt wird, indem es den von der App zurückgegebenen Wert schneidetsupportedInterfaceOrientationsForWindow: Methode mit dem von der zurückgegebenen WertsupportedInterfaceOrientations Methode des obersten Vollbild-Controllers.

Also habe ich untergeordnetUINavigationControllergab meineMainNavigationController eine boolesche EigenschaftlandscapeOK und verwendet dies, um die zulässigen Ausrichtungen in zurückzugebensupportedInterfaceOrientations. Dann in jedem meiner View ControllerviewWillAppear: Methoden Ich habe eine Zeile wie diese

    [(MainNavigationController*)[self navigationController] setLandscapeOK:YES];

zu sagen, meinMainNavigationController das gewünschte Verhalten.

Hier kommt die Frage: Wenn ich jetzt zu meiner vierten Ansicht im Hochformat navigiere und das Telefon umdrehe, dreht es sich in Querformat. Jetzt drücke ich die Zurück-Taste, um zu meiner dritten Ansicht zurückzukehren, die nur im Hochformat funktionieren soll. Aber es dreht sich nicht zurück. Wie mache ich das?

Ich habe es versucht

    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]

in demviewWillAppear Methode meines dritten View-Controllers, aber es macht nichts. Ist dies die falsche Methode zum Aufrufen oder möglicherweise die falsche Methode zum Aufrufen oder sollte ich das Ganze auf eine völlig andere Weise implementieren?

Antworten auf die Frage(14)

Ihre Antwort auf die Frage