У меня есть UITabBarController, и каждая вкладка обрабатывает другой UIViewController, который при необходимости помещает в стек новые контроллеры. На двух из этих вкладок мне нужна возможность при достижении определенного контроллера возможность повернуть iPhone и визуализировать вид в альбомном режиме. После долгой борьбы я обнаружил, что создание подкласса UITabBarController является обязательным для переопределения shouldAutorotateToInterfaceOrientation. Однако, если я просто верну YES в реализации, возникнет следующий нежелательный побочный эффект:
каждый контроллер на каждой вкладке автоматически переводится в альбомный режим при повороте iPhone.
Даже переопределение shouldAutorotateToInterfaceOrientation в каждом контроллере для возврата NO не работает: когда iPhone поворачивается, контроллер переводится в ландшафтный режим.
Я реализовал shouldAutorotateToInterfaceOrientation в подклассе UITabBarController следующим образом:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if([self selectedIndex] == 0 || [self selectedIndex] == 3)
return YES;
return NO;
}
Так что только две интересующие меня вкладки фактически поддерживают ландшафтный режим. Есть ли способ поддержать ландшафтный режим для конкретного контроллера в стеке конкретной вкладки?
Я безуспешно пробовал что-то вроде
(BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {
if([self selectedIndex] == 0 || [self selectedIndex] == 3)
{
if ([[self selectedViewController] isKindOfClass: [landscapeModeViewController class]])
return YES;
}
return NO;
}
Кроме того, я безуспешно пытался использовать метод делегата didSelectViewController. Любая помощь приветствуется. Спасибо.