我有一个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
}
答案 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
。