如何知道单击了哪个Tabbar菜单

时间:2014-04-17 17:25:20

标签: ios tabbar

我有一个UITabBarController链接到5个viewcontrollers,如下图所示。

在我的开始屏幕中,我有注册页面,如果用户没有注册,那么我不想让用户看到任何内容的奖励和优惠ViewController。

每当用户点击tabbarviewcontroller时,我想生成一个显示注册或取消的UIAlertView

我的问题是,当用户点击奖励或优惠时,我应该如何知道点击了哪个标签栏菜单才能生成UIAlertView

我正在使用故事板。我有一个tabbarcontroller和这个tabbarcontroller的自定义类。头文件如下:

#import <UIKit/UIKit.h>

@interface MainHarvestGrillTabBarViewController : UITabBarController <UITabBarDelegate>

@end

我想知道如何访问点击哪个标签。

我已经实现了以下代码,但无论点击哪个标签,它都会返回o。

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    NSUInteger index = self.tabBarController.selectedIndex;
    NSLog(@"index %lu",(unsigned long)index);
    // Recenter the slider (this application does not accumulate multiple filters)
    // Redraw the view with the new settings
}

enter image description here

2 个答案:

答案 0 :(得分:1)

获取所选标签项的索引:

NSUInteger index = self.tabBarController.selectedIndex;//The index of the view controller associated with the currently selected tab item.

或者如果你想获取与选择相关的实际viewController,你可以这样做:

id yourViewController = [self.tabBarController selectedViewController];//The view controller associated with the currently selected tab item

答案 1 :(得分:1)

您可以使用标签栏的didSelectItem协议方法检查选择了哪个标签,但这不会阻止显示视图控制器。相反,您可以使用UITabBarControllerDelegate协议并实施shouldSelectViewController:(UIViewController *)viewController方法。那么你将检查选定的视图控制器并采取相应的行动。以下是阻止用户选择“奖励”选项卡的示例:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {

    if ([tabBarController.viewControllers objectAtIndex:3] == viewController) {
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Alert message" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
        [alertView show];
        return NO;

    }
    return YES;
}

您可以将它放在标签栏控制器类中。您还需要在标头文件中添加<UITabBarControllerDelegate>,并在self.delegate = self;中设置viewDidLoad