如何确定哪个tabbar索引是我的视图控制器

时间:2011-03-09 09:15:55

标签: iphone cocoa-touch ios uikit uitabbarcontroller

有人可以告诉我如何确定视图控制器所处的tabbar索引。

简化 - 我可以通过硬编码索引来跳转到tabBarItem。

self.tabBarController.selectedIndex = 3;

但是,如果用户自定义标签栏项目,则第3号的viewController可能不是用户在移动时所需的那个。如何确定它移动到哪里,以便我可以选择正确的。

请帮助。

谢谢,

3 个答案:

答案 0 :(得分:15)

使用self.tabBarController.selectedViewController属性。

UPDATE :要获取特定viewController的索引,请使用:

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

答案 1 :(得分: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);

答案 2 :(得分:0)

好吧,所以我没有成功解决任何任何答案 - 但我确实对它进行了排序,以为我会解释我是如何做到这一点的,因为有其他人因试图做我做的事而陷入困境。

我的标签栏控制器上的每个tabBarItem都被分配了一个以0开头并以8结尾的标签。(也可以在IB中完成)

确保tabBarController等的委托全部设置并且使用以下委托方法:

- (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];

}

(注意我在我的app中使用了ViewControllers的导航控件,因此for循环)

所以现在我能够做的只是检查prefs中是否有一个带有新标签栏命令的数组

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


if(tabBarOrder) { ... }

如果有一个标签栏顺序,我可以用'[tabBarOrder indexOfObjectIdenticalTo:[NSNumber numberWithInt:theViewsTagImAfter]]获得我想要的VC的索引;

如果prefs中没有数组,你可以放心地假设它没有移动,就在哪里。

**

任何人都可以随意破坏我如何做到这一点,如果你觉得你可以以更光滑的方式完成这一任务。然而,这是有效的,其他建议没有。