有人可以告诉我如何确定视图控制器所处的tabbar索引。
简化 - 我可以通过硬编码索引来跳转到tabBarItem。
self.tabBarController.selectedIndex = 3;
但是,如果用户自定义标签栏项目,则第3号的viewController可能不是用户在移动时所需的那个。如何确定它移动到哪里,以便我可以选择正确的。
请帮助。
谢谢,
利
答案 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中没有数组,你可以放心地假设它没有移动,就在哪里。
**
任何人都可以随意破坏我如何做到这一点,如果你觉得你可以以更光滑的方式完成这一任务。然而,这是有效的,其他建议没有。