当iOS7上的selectedIndex值发生变化时,TabBar会消失

时间:2014-02-10 15:27:36

标签: ios iphone objective-c

我有一个使用6.1 base sdk构建的iOS应用程序。现在我将应用程序移动到下一个SDK 7.0。我有一个tabbar,上面有5个项目。每个选项卡都是导航控制器。此外,推入这些导航控制器的每个视图控制器都会使用方法

隐藏标签栏
[self setHidesBottomBarWhenPushed:YES];

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

[self.application.tabBarController setSelectedIndex:2];

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

可能是什么问题?

2 个答案:

答案 0 :(得分:10)

我找到了解决方案。我的代码起初是以下内容。标签栏控制器中的两个导航控制器都弹出到根视图控制器。

[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 :(得分:0)

如果你确实需要首先使用pop-to-root-VC,然后切换到另一个标签栏,那么在动画参数中使用false会有一个很好的解决方法:

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

这样您就可以先popToRootViewControllerAnimated,然后以编程方式切换到所需的标签栏。