0

因此,我尝试使用 UITabBar 而不是 UITabBarController 来创建应用程序,因此我在标题中声明了 UITabBar 以使其可以从我的所有方法中访问,因此我只是这样做了:

tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 430, 320, 50)];
[self.view addSubview:tabBar];

我使用 NSMutableArray 添加我的对象......但在我的标题中,我也删除了:

@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);
}

但是当我进入应用程序并尝试更改选项卡时,日志什么也没有返回,所选的选项卡发生了变化,但我的日志什么也没有!我已经在互联网上看到这个功能设置为完成这项工作,但我不明白为什么它不适用于我的代码。那么有人可以告诉我我做错了什么,这个功能不会选择标签更改吗?

4

1 回答 1

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

于 2012-11-07T22:58:34.147 回答