答案取决于 UITabBar 是否由 UITabBarController 管理。
案例 1 - UITabBar 已由 UITabBarController 处理
实现UITabBarControllerDelegate 协议。特别是tabBarContoller:didSelectViewController: 方法。将实现协议的类的实例设置为delegate 的UITabBarController。
- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController {
NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController];
NSLog(@"Tab index = %u (%u)", (int)indexOfTab);
}
在这种情况下,您必须注意标签控制器中有足够的控制器以显示“更多”标签的特殊情况。在这种情况下,您将收到对 tabBarController:didSelectViewController: 的调用,其中包含不在列表中的视图控制器(它是内部 UIKit 类 UIMoreNavigationController 的实例)。在这种情况下,我示例中的indexOfTab 将是NSNotFound。
案例 2 - UITabBar 尚未由 UITabBarController 处理
实现UITabBarDelegate 协议。特别是tabBar:didSelectItem: 方法。将实现协议的类的实例设置为UITabBar 的delegate。
- (void)tabBar:(UITabBar *)theTabBar didSelectItem:(UITabBarItem *)item {
NSUInteger indexOfTab = [[theTabBar items] indexOfObject:item];
NSLog(@"Tab index = %u", (int)indexOfTab);
}
编辑:修改方法参数变量以消除 OP 关于 tabBarController 被隐藏的编译警告。