iPhone应用程序 - 检测按下了哪个标签栏项目

CdB*_*CdB 18 objective-c tabbar uitabbaritem

我有一个基于标签栏的应用程序,有超过5个标签栏项目 - 所以我在视图中直接显示其中4个,其余可用选择"更多"标签.当按下标签栏项目时,我想检测它是哪一个.
所以,在
- (void)tabBarController:(UITabBarController *)tabBarCtrl didSelectViewController:(UIViewController *)viewController方法中,我tabBarCtrl.selectedViewController.title用来获取项目的标题.

这适用于视图中可见的选项卡 - 即第一个选项卡和"更多"选项卡 - 但不适用于按下"更多"选项卡后列表中显示的其他选项卡栏项目.

我可以看到,从"更多"列表中选择一个选项卡时,甚至都没有调用didSelectViewController方法.
如何在按下时检测到它们中的任何一个?

先感谢您.

0x8*_*00d 21

如何在更多部分获得UITabBarItem的标题?

- (void)tabBarController:(UITabBarController *)tabBarController 
 didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
    NSLog(@"controller title: %@", viewController.title);

    if (viewController == tabBarController.moreNavigationController)
    {
        tabBarController.moreNavigationController.delegate = self;
    }
}
Run Code Online (Sandbox Code Playgroud)


aka*_*kyy 15

您可以使用以下代码访问所选项目的索引UIViewController.它将始终返回yout tab的索引.

self.tabBarController.selectedIndex;
Run Code Online (Sandbox Code Playgroud)

因此,如果您有6个项目,则可以转到"更多..."选项卡,选择"第5个"项目,selectedIndex将为4.如果您转到更多选项卡并选择第6项,它将返回5.


编辑:如果你想检查一些UITabBarItem的当前位置,你可以这样做:

首先,在您的XIB文件中,您应该编辑tag每个选项卡的属性,以便第一个选项卡将具有tag = 100,2nd - 200,3rd - 300等.

然后在ViewController中添加以下代码:

UIViewController *selectedVC = [self.tabBarController.viewControllers objectAtIndex:self.tabBarController.selectedIndex];
int selectedItemTag = selectedVC.tabItem.tag;
Run Code Online (Sandbox Code Playgroud)

然后你可以通过使用selectedItemTag变量来确定它是什么viewController .在这种情况下,您可以通过以下方式确定selectedIndex : selectedIndex = (selectedItemTag-100)/100.

tag属性没有自定义UITabBar时改变,所以你可以信任他们:)

  • 你好Kashiv.您的方法听起来不错,但是用户无法重新排序标签栏项目?然后每个项目的索引将发生变化. (2认同)

Ken*_*isa 5

您可以使用UITabBarDelegate方法检测何时按下选项卡:http: //developer.apple.com/library/ios/#documentation/uikit/reference/UITabBarDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UITabBarDelegate

您可以将UITabBarController类作为委托并在实现中添加方法:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    NSLog(@"tab selected: %@", item.title); 
} 
Run Code Online (Sandbox Code Playgroud)