2014-02-10 2 views
7

У меня есть приложение iOS, которое было создано с 6.1 базовым sdk. Теперь я переношу приложение в следующий SDK 7.0. У меня есть вкладка, на которой есть 5 элементов. Каждая вкладка является навигационным контроллером. Кроме того, каждый контроллер вид, который выталкивается в эти навигационные контроллеры скрывает панель вкладок с помощью методаTabBar исчезает, когда selectedIndex изменяется значение на iOS 7

[self setHidesBottomBarWhenPushed:YES]; 

Когда я нахожусь на второй вкладке, я нажимаю кнопку, и после того, как веб-соединения, он хлопает укоренить вид контроллера и обновляет SelectedIndex контроллера tabbarcontroller. Доступ к главному контроллеру панели управления осуществляется с помощью ссылки в appdelegate. Дело в том, что когда выбранный индекс равен 1, а затем я устанавливаю его как 2, панель вкладок исчезает. Однако, когда он равен 2, и я снова устанавливаю его 2, проблем нет.

[self.application.tabBarController setSelectedIndex:2]; 

Эта проблема возникает только в симуляторе iOS 7. Когда я имитирую симулятор iOS 6, этого не происходит. Также мои элементы табуляции являются обычными, я не знаю, связано ли это с этим.

В чем может быть проблема?

ответ

8

Я нашел решение. Сначала мой код был следующим. Оба навигационных контроллера в контроллере таблеток вышли на контроллер корневого представления.

[self.navigationController popToRootViewControllerAnimated:YES]; 
[self.application.tabBarController setSelectedIndex:2]; 
[self.application.tabBarController.secondTabNavigationController popToRootViewControllerAnimated:YES]; 

Когда я переставить заказы методов popToRootViewController, проблема исчезла.

[self.application.tabBarController setSelectedIndex:2]; 
[self.application.tabBarController.secondTabNavigationController popToRootViewControllerAnimated:YES]; 
[self.navigationController popToRootViewControllerAnimated:YES]; 

Первый работает отлично в устройствах iOS 6, но он не работает в устройствах iOS 7. Второй работает для всех.

+1

У меня была аналогичная проблема с получением кода iOS для работы на iOS7. Я обнаружил, что [self.navigationController popToRootViewControllerAnimated: NO] также будет работать. Также обратите внимание, что в соответствии со следующим ответом панель вкладок не должна скрываться таким образом http://stackoverflow.com/a/20622663/390557 – wreckgar23

+0

Я решаю проблемы одинаково .. но почему? – Jacky

+0

большое спасибо. Это действительно помогло мне! – ShineWang

0

Если вам нужно, чтобы первая поп-к корневой VC и только затем переключиться на другую панель вкладок есть большой обходной путь для него, используя ложь в мультфильме пар:

// Assuming the current selected index might be a non-zero value 
tabBarController.popToRootViewControllerAnimated(false) 
tabBarController.selectedIndex = 0 

Таким образом, вы можете сначала popToRootViewControllerAnimated и только затем программно переключиться на нужную панель вкладок.

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