iOS 7上更改selectedIndex值时TabBar消失

9

我有一个iOS应用程序,其中使用了6.1基本SDK构建。现在我正在将该应用程序移动到下一个SDK 7.0。我有一个选项卡,其中有5个项目。每个标签是一个导航控制器。此外,推入这些导航控制器的每个视图控制器都使用方法隐藏选项卡栏

[self setHidesBottomBarWhenPushed:YES];

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

[self.application.tabBarController setSelectedIndex:2];

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

可能的问题是什么?

2个回答

11

我找到了解决方案。最开始我的代码如下所示。标签栏控制器中的两个导航控制器都会弹回到根视图控制器。

[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
我曾遇到类似的问题,在iOS7上无法运行某些iOS代码。我发现[self.navigationController popToRootViewControllerAnimated:NO]也能起作用。此外,请注意根据以下答案,选项卡栏不应该以这种方式隐藏https://dev59.com/T2Ij5IYBdhLWcg3wJCB-#20622663。 - wreckgar23

1
如果您需要先弹出到根视图控制器,然后再切换到另一个选项卡,那么可以使用动画参数中的false来解决此问题。
// Assuming the current selected index might be a non-zero value
tabBarController.popToRootViewControllerAnimated(false)
tabBarController.selectedIndex = 0

这样你就可以先使用popToRootViewControllerAnimated,然后再通过编程方式切换到所需的选项卡。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接