0

したがって、UITabBarControllerではなくUITabBarを使用してアプリケーションを作成しようとしているので、ヘッダーで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 に答える