iOS 6: Как мне ограничить некоторые виды портретом и позволить другим вращаться?

У меня есть приложение для iPhone, которое используетUINavigationController представить интерфейс детализации: сначала один вид, затем другой, до четырех уровней в глубину. Я хочу, чтобы первые три вида были ограничены книжной ориентацией, и только последний вид должен быть повернут в альбомную ориентацию. При возврате из четвертого вида в третий и четвертый вид был в альбомной ориентации, я хочу, чтобы все повернулось назад в портрет.

В iOS 5 я просто определилсяshouldAutorotateToInterfaceOrientation: в каждом из моих контроллеров представления вернуть YES для допустимых ориентаций. Все работало, как описано выше, включая возврат в портретный режим, даже если устройство удерживалось в горизонтальной ориентации при возврате из контроллера вида № 4 в № 3.

В iOS 6 все контроллеры представления поворачиваются к пейзажу, ломая те, которые не былит хотел. Примечания к выпуску iOS 6 говорят

Больше ответственности переходит к приложению и делегату приложения. Теперь контейнеры iOS (такие какUINavigationController) не консультируйтесь со своими детьми, чтобы определить, должны ли они автоматически поворачиваться. [...] Система запрашивает самый верхний полноэкранный контроллер представления (обычно контроллер корневого просмотра) для его поддерживаемых ориентаций интерфейса всякий раз, когда устройство вращается или всякий раз, когда контроллер представления представлен с полноэкранным модальным стилем представления. Кроме того, поддерживаемые ориентации извлекаются, только если этот контроллер представления возвращает YES из своегоshouldAutorotate метод. [...] Система определяет, поддерживается ли ориентация, путем пересечения значения, возвращаемого приложениемsupportedInterfaceOrientationsForWindow: метод со значением, возвращаемымsupportedInterfaceOrientations метод самого верхнего полноэкранного контроллера.

Так что я подклассUINavigationControllerдал мойMainNavigationController булево свойствоlandscapeOK и использовал это, чтобы вернуть допустимые ориентации вsupportedInterfaceOrientations, Тогда в каждом из моих контроллеров зрения viewWillAppear: методы у меня есть такая линия

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

сказать моемуMainNavigationController желаемое поведение.

Здесь возникает вопрос: Если я сейчас перейду к своему четвертому виду в портретном режиме и переверну телефон, он поворачивается в альбомную ориентацию. Теперь я нажимаю кнопку «Назад», чтобы вернуться к третьему виду, который должен работать только в портретном режиме. Но это неповернуть назад. Как мне это сделать?

Я старался

    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]

вviewWillAppear метод моего третьего контроллера представления, но это неничего не делай. Это неправильный метод для вызова или, может быть, это неправильное место для вызова или я должен реализовать все это совершенно по-другому?

Ответы на вопрос(15)

Ваш ответ на вопрос