2014-12-01 47 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.每當我需要知道哪個控制器處於活動狀態時,我現在檢查標籤。