1

iOSアプリケーションにタブを付けました。どのタブがアクティブであるかを知り、タブが変更されたことを検出する必要があります。ストーリーボードにはタブビューコントローラーがあり、タブをクリックするとビューが変わります。クラスを作成しましたTabBarControllerが、次のように定義されています。

ヘッダ

@interface TabBarController : UITabBarController <UITabBarControllerDelegate>

@end

実装

#import "TabBarController.h"

@implementation TabBarController

// In the initialization section, set the delegate
- (id) init
{
    self = [super init];
    if (self) 
    {
        self.delegate = self;
    }
    return self;
}

- (void)tabBarController:(UITabBarController *)tabBarController 
 didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
    NSLog(@"controller title: %@", viewController.title);
}

@end

ただし、上記のコードではタブの変更を検出できませんでした。問題は何だと思いますか?

タブビューをアウトレットにリンクしていませんが、他のビューにリンクしています。これは問題ですか?次に、コンセントをどこにリンクする必要がありますか?

4

2 に答える 2

3

initメソッドが呼び出されていることを確認しましたか? init指定されたイニシャライザではないと思いますUITabBarController。ペン先/ストーリーボードからコントローラをロードするときに呼び出されない可能性があります。

viewDidLoadその場合は、オブジェクトの初期化方法に関係なく呼び出されるため、デリゲートを設定する方が簡単な場合があります。-initWithNibName:bundle:または-initWithCoder、オブジェクトのインスタンス化に使用されるときにデリゲートを設定するようにしてください。

于 2012-04-08T18:58:33.860 に答える
-3

これに対する解決策は、次のように viewDidLoad を実装することです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    NSLog(@"Tabs showed up!");
    self.delegate = self;
}
于 2012-04-24T14:56:50.360 に答える