CdB*_*CdB 18 objective-c tabbar uitabbaritem
我有一个基于标签栏的应用程序,有超过5个标签栏项目 - 所以我在视图中直接显示其中4个,其余可用选择"更多"标签.当按下标签栏项目时,我想检测它是哪一个.
所以,在
- (void)tabBarController:(UITabBarController *)tabBarCtrl didSelectViewController:(UIViewController *)viewController方法中,我tabBarCtrl.selectedViewController.title用来获取项目的标题.
这适用于视图中可见的选项卡 - 即第一个选项卡和"更多"选项卡 - 但不适用于按下"更多"选项卡后列表中显示的其他选项卡栏项目.
我可以看到,从"更多"列表中选择一个选项卡时,甚至都没有调用didSelectViewController方法.
如何在按下时检测到它们中的任何一个?
先感谢您.
0x8*_*00d 21
- (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时改变,所以你可以信任他们:)
您可以使用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)