在我的标题文件中,我有这个:
@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;
但仍然无效。
答案 0 :(得分:15)
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
此方法是UITabBar的委托方法,而不是UITabBarController,所以
self.tabBarController.delegate = self;
无效。
标签栏控制器有自己的UITabBar,但是不允许更改由标签栏控制器管理的标签栏的委托,所以只需尝试使用UITabBarControllerDelegate方法:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
答案 1 :(得分:1)
您需要添加以下内容:
tabbarcontroller.delegate = self;
答案 2 :(得分: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
答案 3 :(得分:0)
您已经合成了标签栏,因此您现在需要写:self.tabBarController.delegate = self;
答案 4 :(得分:0)
只需设置标签栏的代理即可。您可以通过设置self.tabBarController.delegate = self;
或使用“接口”构建器对tabbarcontroller对象(而不是条形)执行此操作,请参阅连接检查器并在文件所有者上拖动连接。
答案 5 :(得分:-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天),但是留在这里的人会遇到并遇到这种情况。