Лучшая практика для поддержки портретной и альбомной ориентации в UINavigationController

Я искал повсюду, и я не уверен, что то, что я нашел, является лучшим способом справиться с этим (хотя кажется, что это единственный).

Согласно Хотите использовать несколько наконечников для различных ориентаций интерфейса iphone Я применил соответствующие методы, и вроде все работает нормально. К сожалению, мне приходится иметь дело с UINavigationController, и каждая страница должна поддерживать как портретный, так и ландшафтный режимы и воспроизводить те же функции в обоих режимах. Это означает, что если пользователь в какой-то момент решает переключиться с книжной на альбомную, все приложение должно позволять ему перемещаться вперед и назад по страницам в выбранном им режиме.

Очевидно, немного документации, которой не хватает, - это то, как с этим справиться. В моих представлениях у меня есть несколько кнопок с прикрепленным методом showChild, который выполняет навигацию. Все хорошо работает в портретном режиме (это режим по умолчанию, насколько я понимаю). Метод выглядит так:

- (IBAction)showChild:(UITapGestureRecognizer *)sender {
    UIView *view = [sender view];
    PortraitViewController *nextPortraitViewcontroller = [[PortraitViewController alloc] initWithNibName:@"Portrait" bundle:nil];
    [self.navigationController pushViewController:nextPortraitViewcontroller animated:YES];
}

Но когда дело доходит до ландшафтного режима, я получаю неоднозначные результаты. Метод showChild: в классе LandscapeViewController точно такой же, он создает представление, начиная с PortraitViewController, и отправляет его в контроллер навигации. Кажется, все идет хорошо, но когда я возвращаюсь назад, я получаю предыдущий показанный PortraitViewController, а не ландшафт, а также все его подвиды разбросаны повсюду, а не там, где я их поместил.

Теперь вопрос в следующем: поскольку Apple, похоже, на самом деле не заботится о документации и передовых методах (кстати, весь этот механизм очень далек от идеала, и я могу сказать, что это исходит из фона проектирования и программирования взаимодействия человека и компьютера), что correc - Apple, как это сделать?


person Morpheu5    schedule 02.06.2011    source источник
comment
Я думаю, вы хотите протестировать в viewWillAppear: ранее видимого контроллера представления, что он все еще находится в той ориентации, в которой он был, когда он последний раз появлялся   -  person bshirley    schedule 02.06.2011
comment
К сожалению, эти методы не вызываются, когда ViewControllers помещаются в UINavigationController. Я мог бы сделать настраиваемый RootViewController UINavigationControllerDelegate и использовать соответствующие методы, но я не знаю, как это сделать.   -  person Morpheu5    schedule 02.06.2011
comment
Хорошо, я решил, что использовал собственный RootViewController и установил его в качестве делегата для контроллера навигации. К сожалению, это работает не так хорошо, как я надеялся, но завтра проверю. Я также должен проверить устройство, так как теперь я работаю с симулятором, который довольно дрянный относительно ориентации.   -  person Morpheu5    schedule 03.06.2011


Ответы (1)


Я создал образец проекта, чтобы продемонстрировать, как я «решил» свою проблему. Вероятно, это не единственный и не лучший способ, но из-за документации или ее отсутствия это лучшее, что я придумал.

https://github.com/Morpheu5/Rotation

person Morpheu5    schedule 03.06.2011