8

在我的头文件中,我有这个:

@interface TabBarController : UIViewController <UIApplicationDelegate, UITabBarDelegate, UITabBarControllerDelegate>{

    IBOutlet UITabBarController *tabBarController;

}

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end

在我的主文件中,我有这个:

@synthesize tabBarController;

-(void)viewDidLoad{
    [super viewDidLoad];
    self.tabBarController.delegate = self;
    self.view = tabBarController.view;
}

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
    NSLog(@"rawr"); 
}

- (void)viewDidUnload {
    [super viewDidUnload];
}

- (void)dealloc {
    [tabBarController release];
    [super dealloc];
}


@end

我已经将我tabbarcontroller作为委托人连接到接口构建器中的文件所有者,但它仍然从未调用该didSelectItem方法。

有什么我在这里想念的吗?

我已经加了tabBarController.delegate = self;,还是不行。

4

6 回答 6

16
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;

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

self.tabBarController.delegate = self;

不管用。

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

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
于 2012-07-18T04:31:11.600 回答
1

你需要添加这个:

tabbarcontroller.delegate = self;
于 2012-06-08T09:18:43.957 回答
1

使用UITabBarControllerDelegate代替UITabBarDelegate
-tabBarController:didSelectViewController{}代替tabBar:didSelectItem{}

界面

@interface TabBarController : UIViewController <UIApplicationDelegate, UITabBarControllerDelegate, UITabBarControllerDelegate>{

    IBOutlet UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end

主文件

@implementation TabBarController
    @synthesize tabBarController;

    /*other stuff*/
    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
        NSLog(@"rawr"); 
    }
    /*other stuff*/
@end
于 2015-08-04T12:49:41.013 回答
0

只需为标签栏设置委托。您可以通过self.tabBarController.delegate = self;对 tabbarcontroller 对象(而不是 bar)设置或使用 Interface builder do 查看连接检查器并拖动文件所有者上的连接来完成此操作。

于 2012-06-08T09:40:19.227 回答
0

您已经合成了标签栏,所以您现在需要编写:self.tabBarController.delegate = self;

于 2012-06-08T09:21:33.200 回答
-1

如上所述,它可能无法正常工作的原因有很多。这是一个更微妙的原因。如果您以编程方式创建 UI(没有情节提要或 Xib),则需要设置 UIWindow 的屏幕。

self.window = [[UIWindow alloc] init];
self.window.screen = [UIScreen mainScreen];  // <- The UITabViewController will not
                                             //    accept taps without this.

如果您使用的是 Xib,我相信这相当于选择了“启动时全屏”。这必须检查,否则我注意到我的选项卡不起作用。

更新:无论如何,如果你必须给我投票,但我有一个不工作的选项卡控制器,这是我必须做的才能让它工作。此页面上的其他答案都没有帮助我。我想这些天使用 xib/storyboard 是非常罕见的(我认为这是从 iOS 5 天开始的),但是离开这里是为了遇到这种情况的人。

于 2013-01-25T00:16:44.320 回答