2014-12-01 49 views
1

我一直在使用tabBarController selectedIndex来确定是否应该显示导航栏。一切工作正常的今天大多数的,但现在这行代码:UITabBarController selectedIndex滞后一下

self.tabBarController.selectedIndex 

是给最后选择的索引,而不是当前选定的指数。我在viewWillAppear中运行这段代码,以确保在tabBarController中具有索引1的特定视图不会在其第一个视图上显示其导航栏。

但它报告1点击落后。例如,当我点击第二个索引,然后点击第一个索引时,即使我刚刚点击了具有索引1的视图控制器,我的最后一次点击仍然显示为在索引2处选择了视图控制器。此外,selectedIndex始终我第一次单击任何视图控制器时正确列出,但在第一次通过tabBarController查看之后从未更正。

我查看了tabBarController类的引用,但它看起来像这个selectedIndex属性应该是直截了当的。我错过了什么?

+0

使用dispatch_once或其他东西或使用tabbar delegate – Andy 2014-12-01 23:36:06

+0

@安迪感谢您的意见,但dispatch_once将无法正常工作,因为我正在重复使用不同tabBar索引的视图控制器。我看了看Tabbar委托,但我没有看到如何/为什么这是如何解决这个selectedIndex滞后。你能澄清吗? – 2014-12-01 23:43:26

+0

你是什么意思“我重复使用视图控制器跨越不同tabBar索引”?解释你的控制器设置。 – rdelmar 2014-12-01 23:44:50

回答

0

您遇到的问题是viewWillAppear在索引实际更改之前调用。 首先,tabBarController shouldSelectViewController - > viewWillAppear - > tabBarController didSelectViewController - > viewDidAppear。 我有一个类似的设置,我在不同tabBar索引中重用ViewControllers。我不想检查viewDidAppear中的selectedIndex,即使这可以解决问题。 我做了什么来解决这个问题是去标签。两个ViewController都有不同的UINavigationController,我将一个navBar的标签设置为1.每当我需要知道哪个控制器处于活动状态时,我现在检查标签。