以编程方式创建和UITabBar并检测更改

时间:2012-11-07 22:21:48

标签: objective-c ios uikit uitabbar

所以我试图使用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告诉我,我的错误是这个功能不会选择标签更改吗?

1 个答案:

答案 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文件中声明标签栏委托方法,因为该类的任何客户端都不会调用该方法。