标签栏单击委托

时间:2013-06-13 20:47:11

标签: iphone ios xcode

我有两个视图控制器(FirstViewController和SecondViewController)和一个Tab Bar Controller,我正在使用Storyboard。在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'

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

6 个答案:

答案 0 :(得分:8)

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

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

    [tabBarController setDelegate:self];

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

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

答案 1 :(得分: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);

}

有关详情,请查看info

由于

答案 2 :(得分:2)

我导入并实现了以下内容。希望它有所帮助。

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

}

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

tabBarController:didSelectViewController:

接下来,你应该在调用委托之前初始化委托。在tabbarcontroller尝试与委托交谈后,将调用ViewDidLoad。

答案 5 :(得分:0)

为了摆脱编译器警告,您的SecondViewController应符合UITabBarControllerDelegate协议而不是UITabBarDelegate协议。

@interface SecondViewController : UIViewController<UITabBarControllerDelegate>