2010-09-22 74 views
23

我有一个标签栏应用程序,我需要知道用户在标签栏上点击什么按钮以显示相应的通知等。UITabBar(控制器) - 获取挖掘索引?

简而言之:我该如何去检测UITabBar上一个点击UITabBarItem的索引?

在此先感谢!

+0

请考虑这个问题的答案:-) 的http://计算器。com/questions/31521951 /如何获取选定的uitabbaritem-in-uitabbarcontroller-for-than- – 2015-07-20 18:22:56

回答

92

答案取决于UITabBar是否由UITabBarController管理。

案例1 - UITabBar已由的UITabBarController

处理贯彻UITabBarControllerDelegate协议。具体是tabBarContoller:didSelectViewController:方法。将实现协议的类的实例设置为UITabBarControllerdelegate

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController { 
    NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController]; 
    NSLog(@"Tab index = %u (%u)", (int)indexOfTab); 
} 

在这种情况下,你必须要知道的,你必须在标签控制器足够的控制器导致显示“更多”选项卡中的特殊情况。在这种情况下,您将通过不在列表中的视图控制器(它是内部UIKit类UIMoreNavigationController的实例)接收对tabBarController:didSelectViewController:的调用。在这种情况下,我的示例中的indexOfTab将是NSNotFound

案例2 - UITabBar是不是已经由一个的UITabBarController

处理落实UITabBarDelegate协议。具体是tabBar:didSelectItem:方法。将实现该协议的类的实例设置为UITabBardelegate

- (void)tabBar:(UITabBar *)theTabBar didSelectItem:(UITabBarItem *)item { 
    NSUInteger indexOfTab = [[theTabBar items] indexOfObject:item]; 
    NSLog(@"Tab index = %u", (int)indexOfTab); 
} 

编辑:修改方法的参数变量,以消除OP的编译警告有关tabBarController被隐藏。

+0

谢谢,谢谢,谢谢! Xcode吐出一些错误:“警告:'tabBarController的本地声明'隐藏实例变量'”,我需要担心的任何事情? – esqew 2010-09-22 21:20:34

+0

对不起,但你如何确定你是哪种情况? – JaseC 2015-05-29 00:25:50

6

UITabBarDelegate协议中定义了一种名为tabBar:didSelectItem:的方法,该方法会通知您选择(点击)哪个和何时UITabBarItem

2

我做了这样的: 这是在一个延伸的UITabBarController

自定义类的.h

@interface CustomTabBarController : UITabBarController<UITabBarDelegate> 

.M

-(void)tabBar:(UITabBar *)theTabBar didSelectItem:(UIViewController *)viewController 
{ 
    NSLog(@"Tab index = %@ ", theTabBar.selectedItem); 
    for(int i = 0; i < theTabBar.items.count; i++) 
    { 
     if(theTabBar.selectedItem == theTabBar.items[i]) 
     { 
      NSLog(@"%d",i);// this will give the selected tab 
     } 

    } 
    //NSlog(@"Items = %@", theTabBar.items[0]); 
} 
5

SWIFT 3:

// somewhere inside your TabBarViewController 
//... 
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
    let indexOfTab = tabBar.items?.index(of: item) 
    print("pressed tabBar: \(String(describing: indexOfTab))") 
} 
1

SWIFT 4:

我喜欢

// somewhere inside your TabBarViewController 
//... 
func tabBarController(_ tabBarController: UITabBarController, 
        shouldSelect viewController: UIViewController) -> Bool{ 
    let index = tabBarController.viewControllers?.index(of: viewController) 
    return true// you decide 
}