2014-02-10 64 views
7

我有一个使用6.1 base sdk构建的iOS应用程序。现在我正在将应用程序移至下一个SDK 7.0。我有一个有5个项目的标签栏。每个标签都是一个导航控制器。此外,其被压入这些导航控制器每个视图控制器隐藏与方法当iOS7上的selectedIndex值发生变化时,TabBar会消失

[self setHidesBottomBarWhenPushed:YES]; 

当我在第二个选项卡,我按下一个按钮和一个网络连接后的标签栏,它弹出到根视图控制器并更新tabbarcontroller的selectedIndex。主tabbar控制器在appdelegate中以其引用进行访问。发生的事情是,当选择的索引是1,然后我将它设置为2标签栏消失。但是,当它是2,我再次设置它2没有问题。

[self.application.tabBarController setSelectedIndex:2]; 

此问题仅在iOS 7模拟器中出现。当我在iOS 6模拟器上模拟时,它不会发生。另外我的tabbar项目是自定义的,我不知道它是否与它有关。

可能是什么问题?

回答

8

我找到了解决方案。起初,我的代码如下。 Tabbar控制器中的两个导航控制器都会弹出到根视图控制器。

[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,然后才切换到另一个标签栏有通过在动画PARAM使用假换一个伟大的解决办法:

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

这样你可以先popToRootViewControllerAnimated,然后编程切换到你想要的标签栏。

相关问题