UITabBar(控制器) - 获取分类指数?

时间:2010-09-22 04:08:29

标签: iphone objective-c cocoa-touch uitabbarcontroller

我有一个标签栏应用程序,我需要知道用户点击标签栏的时间和按钮,以显示相应的通知等。

简而言之:如何在UITabBar上检测点击的UITabBarItem的索引?

提前致谢!

6 个答案:

答案 0 :(得分:96)

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

案例1 - UITabBar已由UITabBarController处理

实施UITabBarControllerDelegate协议。特别是tabBarContoller:didSelectViewController:方法。将实现协议的类实例设置为delegate的{​​{1}}。

UITabBarController

在这种情况下,您必须了解选项卡控制器中有足够控制器以显示“更多”选项卡的特殊情况。在这种情况下,您将接收到- (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

案例2 - UITabBar尚未由UITabBarController处理

实施NSNotFound协议。特别是UITabBarDelegate方法。将实现协议的类实例设置为tabBar:didSelectItem:的{​​{1}}。

delegate

编辑:修改了方法参数变量,以消除OP隐藏UITabBar的编译警告。

答案 1 :(得分:7)

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))")
}

答案 2 :(得分:6)

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

答案 3 :(得分:5)

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
}

答案 4 :(得分: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 :(得分:0)

Swift 4 的简单扩展名:

extension UITabBarController {
    func getSelectedTabIndex() -> Int? {
        if let selectedItem = self.tabBar.selectedItem {
            return self.tabBar.items?.firstIndex(of: selectedItem)
        }
        return nil
    }
}

和用法:

let index = getSelectedTabIndex()