При использовании контроллера UITabBar все сообщения об ориентации переходят на панель вкладок и на этом останавливаются.
Итак, чтобы выполнить то, что вы пытаетесь сделать, вы должны создать новый класс, унаследованный от UITabBarController, и использовать его вместо этого.
@interface CustomUITabBarController : UITabBarController
После этого у вас есть 2 варианта управления ориентацией ваших контроллеров, и у вас обоих будет выбор shouldAutorotateToInterfaceOrientation селектор.
Вы можете использовать текущий выбранный индекс панели вкладок для возврата ДА или НЕТ для ориентации
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if(self.selectedIndex == 0) {
return NO;
} else {
return YES;
}
}
ИЛИ вы можете позволить контролеру решать за себя (как вы пытались сделать раньше)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (self.selectedViewController) {
return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
} else {
return YES;
}
}