所以我试图使用UITabBar而不是UITabBarController创建一个应用程序,所以我在我的标题中声明了UITabBar,以便从我的所有方法中获取它,所以为了实现它我只是做了:
tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 430, 320, 50)];
[self.view addSubview:tabBar];
并且我使用NSMutableArray来添加我的对象......但是在我的标题中我也是delcaired:
@interface RootViewController: UIViewController {
IBOutlet UITabBar *tabBar;
}
@property (nonatomic, retain) UITabBar *tabBar;
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
然后我做了一个简单的功能:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
NSLog(@"didSelectItem: %d", item.tag);
}
但是当我进入应用程序并尝试更改选项卡时,日志不返回任何内容,选定的选项卡会更改,但我的日志一无所获!我已经看到这个功能设置为在互联网上完成这项工作,我不明白为什么它不适用于我的代码。 所以有人mybe告诉我,我的错误是这个功能不会选择标签更改吗?
答案 0 :(得分:1)
在RootViewController.h中,执行以下操作:
@interface RootViewController : UIViewController
@end
在RootViewController.m中,执行以下操作:
@interface RootViewController () <UITabBarDelegate>
@end
@implementation RootViewController {
UITabBar *tabBar;
}
#pragma mark UITabBarDelegate methods
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
NSLog(@"didSelectItem: %d", item.tag);
}
#pragma mark UIViewController methods
- (void)viewDidLoad {
[super viewDidLoad];
tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 430, 320, 50)];
tabBar.delegate = self;
[self.view addSubview:tabBar];
}
@end
此布局利用了现代Objective-C的新LLVM编译器功能。
您不需要属性,因为该类的用户无需访问选项卡栏。您不需要将任何内容标记为IBOutlet
,因为您没有使用Interface Builder来设置标签栏。您没有在.h文件中声明标签栏委托方法,因为该类的任何客户端都不会调用该方法。