2011-03-09 50 views
5

有人可以告訴我怎樣才能確定視圖控制器所在的tabbar索引。如何確定哪個tabbar索引是我的視圖控制器

簡化 - 我可以通過硬編碼索引跳轉到tabBarItem。

self.tabBarController.selectedIndex = 3; 

然而,如果用戶自定義標籤欄的項目,有可能在在的viewController 3號是不是如此,因爲它已被移動用戶將想要的。我怎樣才能確定它已經移動到哪裏,以便我可以選擇正確的。

請任何幫助。

感謝,

回答

0

好了,我沒有運氣與任何任何成功的答案 - 但我沒有那種這麼認爲我會解釋我是如何做到這一點,因爲有人被卡住試圖做我做的事情。

我的標籤欄控制器被分配以0開始,並說以8結束(可在IB也可以做)

請確保tabBarController等代表是所有設置和inplement以下標籤每個tabBarItem委託方法:

- (void)tabBarController:(UITabBarController *)theTabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { 

NSInteger count = self.tabBarController.viewControllers.count; 
NSMutableArray *tabOrderArray = [[NSMutableArray alloc] initWithCapacity:count]; 


for (UINavigationController *viewController in viewControllers) 
{ 
    NSInteger tag = viewController.tabBarItem.tag; 
    [tabOrderArray addObject:[NSNumber numberWithInteger:tag]]; 
} 

[prefs setObject:tabOrderArray forKey:@"tabOrder"]; 
[prefs synchronize]; // optional 
[tabOrderArray release]; 

}

(注意我用navControllers ontop的在我的應用程序ViewControllers的,因此,對於環路)

所以現在我能夠做的是簡單地做一個檢查,如果有在首選項陣列以新的標籤欄順序

NSArray * tabBarOrder = [prefs objectForKey:@"tabOrder"]; 


if(tabBarOrder) { ... } 

,如果有一個標籤欄爲了我能得到VC我想的指數'[tabBarOrder indexOfObjectIdenticalTo:[NSNumber numberWithInt:theViewsTagImAfter]];

如果在prefs中沒有數組,你可以安全地假設它沒有移動,並且是在哪裏。

**

任何一個隨意破壞我如何做到了這一點,你應該覺得你可以在一個更時尚的方式已經完成了這一點。然而,這工作和其他建議沒有。

15

使用self.tabBarController.selectedViewController財產。

UPDATE:要獲得特定的viewController的索引,使用:

NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:specificViewController]; 
+0

沒有對不起,你誤會了我的問題或誤導我 - 我不是在尋找我目前的指數,即時通訊看着跳到一個特定的視圖控制器,哪(目前)我不知道哪個索引是在應該改變。任何更清楚?謝謝,抱歉。 – theiOSDude 2011-03-09 09:25:22

+0

'selectedViewController'屬性不返回索引,而是返回'UIViewController'實例。也許我還是不明白你在找什麼... – 2011-03-09 09:28:05

+0

對不起,對 - 你提到的很酷,它允許我選擇一個viewController,所以這樣排序,但是,我需要選擇相應的tabBarItem - 因此,需要index .. – theiOSDude 2011-03-09 09:38:17

1

你可以在UITabBar控制器的列表,並通過指針值進行比較。例如,一個視圖控制器是在中的UITabBar一樣可以計算出它是這樣的位置:

int loc = 0; 
for (UIViewController *vc in [self.tabBarController viewControllers]){ 
    if (vc == self.navigationController || vc == self){ 
     break; 
    } 
    loc++; 
} 
if (loc == [[self.tabBarController viewControllers] count]) 
    NSLog(@"Could not find me!"); 
else 
    NSLog(@"Im in tab:% d",loc); 
相關問題