如何确定哪个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议没有。