标签栏单击委托
我有两个视图控制器(FirstViewController和SecondViewController)和一个选项卡栏控制器,我正在使用故事板。 在FirstViewController中,用户可以拖放一个imageview。 所以每当用户点击显示SecondViewController的第二个TabBarItem时,我想检查用户是否在每次单击TabBarItem时都删除了该图像。
所以我明白这可以用UITabBarDelegate
和它的方法-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
。 但是我做错了,因为方法没有被调用,我相信这是因为我不能正确设置委托。 所以我想让SecondViewController成为TabBarController的代表。
所以在我的SecondViewController.h
我有以下
@interface SecondViewController : UIViewController<UITabBarDelegate>
并在SecondViewController.m
我有
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { NSLog(@"%@", item); } - (void)viewDidLoad { [super viewDidLoad]; self.tabBarController.delegate = self; }
但是没有任何反应,当设置委托时,我也得到了一个编译器警告:从不兼容的types'SecondViewController * const __strong'分配给'id'
请温和我,这是我的第一个应用程序,我第一次尝试使用代表。
将以下代码添加到任何视图控制器
UITabBarController *tabBarController = (UITabBarController*)[UIApplication sharedApplication].keyWindow.rootViewController ; [tabBarController setDelegate:self];
//将任何委托方法添加到您的类
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { NSLog(@"%@", tabBarController); }
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
这个方法是UITabBar的委托方法,而不是UITabBarController
self.tabBarController.delegate = self;
不pipe用。
标签栏控制器有它自己的UITabBar,但不允许更改由标签栏控制器pipe理的标签栏的委托,所以只需尝试像这样的UITabBarControllerDelegate方法:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController NSLog(@"%@", item); }
欲了解更多详情检查信息
谢谢
我导入并实施了以下内容。 希望能帮助到你。
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { if (_mainTab.selectedItem.tag == 1) { NSLog(@"TAB 1"); } else if (_mainTab.selectedItem.tag == 2) { NSLog(@"TAB2"); } else if (_mainTab.selectedItem.tag == 3) { NSLog(@"TAB3"); } else { NSLog(@"TAB NOT WORKING"); } }
您正在使用错误的委托协议UITabBarDelegate
通常用于自定义UITabBar
对象。 您需要使用UITabBarControllerDelegate
协议来检查选项卡是否被选中或自定义选项卡的行为。
你应该实现UITabBarControllerDelegate协议,并使用这个委托callback来跟踪select:
tabBarController:didSelectViewController:
接下来的事情是,你应该在它被调用之前初始化委托。 ViewDidLoad将在tabbarcontroller尝试与委托对话后被调用。
为了摆脱编译器警告你的SecondViewController
应符合UITabBarControllerDelegate
协议而不是UITabBarDelegate
协议。
@interface SecondViewController : UIViewController<UITabBarControllerDelegate>