4

我有两个视图控制器(FirstViewController 和 SecondViewController)和一个标签栏控制器,我正在使用 Storyboards。在 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;
}

但是什么也没有发生,在设置委托时,我也收到编译器警告:从不兼容的类型“SecondViewController *const __strong”分配给“id”

请对我温柔一点,这是我的第一个应用程序,也是我第一次尝试使用代表。

4

6 回答 6

8

将以下代码添加到任何视图控制器

UITabBarController *tabBarController = (UITabBarController*)[UIApplication sharedApplication].keyWindow.rootViewController ;

    [tabBarController setDelegate:self];

// 将任何委托方法添加到您的类

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    NSLog(@"%@", tabBarController);
}
于 2013-06-13T21:48:47.753 回答
3
 -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;

这个方法是UITabBar的委托方法,不是UITabBarController,所以

 self.tabBarController.delegate = self;

不管用。

选项卡栏控制器有自己的 UITabBar,但不允许更改由选项卡栏控制器管理的选项卡栏的委托,所以只需尝试这样的 UITabBarControllerDelegate 方法:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
NSLog(@"%@", item);

}

有关更多详细信息,请查看

谢谢

于 2013-06-14T04:21:39.883 回答
2

I imported and implemented the following. Hope it helps.

- (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");
    }

}
于 2015-07-29T09:41:58.553 回答
1

您使用了错误的委托协议UITabBarDelegate,通常用于自定义UITabBar对象。您需要使用UITabBarControllerDelegate协议来检查是否选择了选项卡或自定义选项卡的行为。

于 2013-06-13T21:31:07.873 回答
0

为了摆脱编译器警告,您SecondViewController应该遵守UITabBarControllerDelegate协议而不是UITabBarDelegate协议。

@interface SecondViewController : UIViewController<UITabBarControllerDelegate>
于 2013-06-13T21:13:09.527 回答
0

您应该实现 UITabBarControllerDelegate 协议,并使用此委托回调来跟踪选择:

tabBarController:didSelectViewController:

接下来的事情是,您应该在调用之前初始化委托。ViewDidLoad 将在 tabbarcontroller 尝试与委托对话后调用。

于 2013-06-13T21:10:53.453 回答