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

the*_*ude 5 iphone cocoa-touch uitabbarcontroller uikit ios

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

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

self.tabBarController.selectedIndex = 3;
Run Code Online (Sandbox Code Playgroud)

然而,如果用户自定义标签栏的项目,有可能在在的viewController 3号是不是如此,因为它已被移动用户将想要的.如何确定它移动到哪里,以便我可以选择正确的位置.

请帮忙.

谢谢,

背风处

Ort*_*ntz 15

使用该self.tabBarController.selectedViewController属性.

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

NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:specificViewController];
Run Code Online (Sandbox Code Playgroud)


the*_*ude 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];
Run Code Online (Sandbox Code Playgroud)

}

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

所以现在我能做的就是简单地检查首选项中是否存在带有新选项卡栏顺序的数组

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


if(tabBarOrder) { ... }
Run Code Online (Sandbox Code Playgroud)

如果有选项卡栏顺序,我可以通过 '[tabBarOrder indexOfObjectIdenticalTo:[NSNumber numberWithInt:theViewsTagImAfter]]; 获取我想要的 VC 索引;

如果首选项中没有数组,您可以放心地假设它没有移动并且位于何处。

**

如果你觉得你可以用一种更时尚的方式完成这件事,任何人都可以随意破坏我的做法。然而,这个有效,而其他建议则无效。