标签栏单击委托

我有两个视图控制器(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>