У меня есть UITabBarController, и каждая вкладка обрабатывает другой UIViewController, который при необходимости нажимает на новые контроллеры стека. В двух из этих вкладок мне нужно, когда достигнут определенный контроллер, возможность поворачивать iPhone и визуализировать представление в ландшафтном режиме. После многого боя я обнаружил, что обязательным подклассифицированием UITabBarController является переопределение shouldAutorotateToInterfaceOrientation. Однако, если я просто вернусь ДА в реализации, возникает следующий нежелательный побочный эффект:
каждый контроллер на каждой вкладке автоматически помещается в альбомный режим при повороте 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 без успеха. Любая помощь приветствуется. Спасибо.