代码之家  ›  专栏  ›  技术社区  ›  esqew

获得抽头索引?

  •  24
  • esqew  · 技术社区  · 15 年前

    我有一个标签栏应用程序,我需要知道用户在标签栏上点击什么时候什么按钮来显示适当的通知等等。

    简而言之: 我该如何检测在uitabar上点击的uitabaritem的索引呢?

    事先谢谢!

    5 回复  |  直到 7 年前
        1
  •  96
  •   Haroldo Gondim smargo    9 年前

    答案取决于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 .

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

    编辑:修改方法参数变量以消除有关 tabBarController 被隐藏。

        2
  •  7
  •   lenooh    8 年前

    斯威夫特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))")
    }
    
        3
  •  6
  •   Jacob Relkin    15 年前

    UITabBarDelegate 调用的协议 tabBar:didSelectItem: ,它将通知您 UITabBarItem 选择(抽头)。

        4
  •  5
  •   dengApro    7 年前

    斯威夫特4:

    我更喜欢

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

    我是这样做的: 这是一个自定义类,它扩展了UItabarController

    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]);
    }