2012-04-21 2 views
0

Я хочу, чтобы моя панель вкладок приложения с тремя вкладками в ландшафтном режиме, а третья закладка должна быть в конечном итоге portrait.I преобразования всего приложения в пейзаж с помощьюВкладка Раскадровки вида бара контроллера альбомной ориентация/Портретная

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

в каждом представлении контроллеры в качестве приложения панели вкладок требуют, чтобы все его контроллеры суб-представлений были в ландшафтном для этого.

В моем файле .plist есть опция Lanscape, а затем добавлен портрет.

Как я могу сделать третью вкладку, чтобы повернуть на портрет?

Ваша помощь очень признательна.

ответ

2

UITabBarController, к сожалению, не очень хорошо обрабатывает контроллеры представлений с различными требованиями к вращению. Лучший способ справиться с этим - подкласс UITabBarController и в shouldAutorotate, просто передать запрос на контроллер вида, который находится на экране. Код будет выглядеть следующим образом:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
// Let's grab an array of all of the child view controllers of this tab bar controller 
NSArray *childVCArray = self.viewControllers; 

// We know that at 5 or more tabs, we get a "More" tab for free, which contains, assumingly, 
// a more navigation controller 

if (self.selectedIndex <= 3) { 
    UINavigationController *navController = [childVCArray objectAtIndex:self.selectedIndex]; 

    // We're in one of the first four tabs, which we know have a top view controller of UIViewController 
    UIViewController *viewController = navController.topViewController; 

    return [viewController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; 
} 
else { 
    // This will give us a More Navigation Controller 

    UIViewController *viewController = [childVCArray objectAtIndex:self.selectedIndex]; 

    return [viewController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; 
} 

return NO; 
} 

Это предполагает, что вы 5+ вид контроллеры используют больше навигации контроллер панели вкладок и не сами по себе в своем собственном UINavigationController. Если бы они были, изменение этого кода было бы тривиально.

Я отправил этот подкласс на моем GitHub, так что вы можете скопировать этот метод или просто захватить .h/.m файлов из here

+0

Я добавил файлы для tabbarcontroller .Edited это для трех вкладок. if (self.selectedIndex <= 2) и удалил случай else для «больше». В третьем контроллере представления, поскольку я хочу только, чтобы быть в портрете, верните YES для (interfaceOrientation == UIInterfaceOrientationPortrait); in должен авторотировать метод. Но все равно его не вращается, чтобы прреть. Где я ошибаюсь? – Senorina

+0

selectedIndex начинается с 0, поэтому, если у вас есть 3 вкладки, то 0, 1 и 2. Являются ли контроллеры представления внутри UINavigationControllers? Если вы посмотрите на код, предполагается, что контроллер вида на панели вкладок является навигационным контроллером, и он захватывает контроллер верхнего уровня. Если у вас просто есть контроллеры представлений, nix навигационный элемент управления – jmstone617

+1

Спасибо за ответ jmstone .. Третий вид не в контроллере навигации. Так что я просто добавил UIViewController * viewController = [childVCArray objectAtIndex: self.selectedIndex]; для selectedIndex == 2 Теперь изображение поворачивается к портрету, когда я меняю ориентацию устройства на портрет. Но затем все остальные вкладки становятся портретами. Я хочу, чтобы третий вид был вынужден делать портрет при каждом выборе (не только когда устройство меняет ориентацию). И другие вкладки всегда должны оставаться в пейзаже. Любое предложение? – Senorina

Смежные вопросы