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

有人可以告诉我如何可以确定视图控制器在哪个tabbar索引。

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

self.tabBarController.selectedIndex = 3; 

但是,如果用户自定义标签栏项目,则可能是编号为3的viewController不是用户希望的,因为它已被移动。 我怎样才能确定它已经移动到哪里,所以我可以select正确的。

请任何帮助。

谢谢,

背风处

使用self.tabBarController.selectedViewController属性。

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

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

您可以获取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); 

好的,所以我没有任何成功的答案 – 但我确实sorting了所以我想解释我是如何做的,因为有别人被卡住试图做我所做的。

我的选项卡栏控制器上的每个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]; 

}

(注意我在我的应用程序中使用ViewControllers的navControllers ontop因此for循环)

所以现在我能做的只是做一个检查,如果有一个新的标签栏顺序偏好的数组

 NSArray * tabBarOrder = [prefs objectForKey:@"tabOrder"]; if(tabBarOrder) { ... } 

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

如果没有数组在前缀你可以安全地假设它没有移动,是在哪里。

**

任何人都可以自由地摧毁我如何做到这一点,如果你觉得你可以用更时尚的方式做到这一点。 然而,这工作,其他build议没有。