8

私のヘッダーファイルにはこれがあります:

@interface TabBarController : UIViewController <UIApplicationDelegate, UITabBarDelegate, UITabBarControllerDelegate>{

    IBOutlet UITabBarController *tabBarController;

}

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end

私のメインファイルにはこれがあります:

@synthesize tabBarController;

-(void)viewDidLoad{
    [super viewDidLoad];
    self.tabBarController.delegate = self;
    self.view = tabBarController.view;
}

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
    NSLog(@"rawr"); 
}

- (void)viewDidUnload {
    [super viewDidUnload];
}

- (void)dealloc {
    [tabBarController release];
    [super dealloc];
}


@end

インターフェイスビルダーでファイルの所有者にデリゲートとしてmy を既に接続tabbarcontrollerしていますが、それでもdidSelectItemメソッドを呼び出すことはありません。

ここに欠けているものはありますか?

すでに追加tabBarController.delegate = self;しましたが、まだ機能しません。

4

6 に答える 6

16
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;

このメソッドは、UITabBarController ではなく、UITabBar のデリゲート メソッドであるため、

self.tabBarController.delegate = self;

動作しないでしょう。

タブ バー コントローラーには独自の UITabBar がありますが、タブ バー コントローラーによって管理されるタブ バーのデリゲートを変更することは許可されていないため、次のように UITabBarControllerDelegate メソッドを試してください。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
于 2012-07-18T04:31:11.600 に答える
1

これを追加する必要があります:

tabbarcontroller.delegate = self;
于 2012-06-08T09:18:43.957 に答える
1

UITabBarControllerDelegateの代わりにUITabBarDelegate、の
-tabBarController:didSelectViewController{}代わりに使用tabBar:didSelectItem{}

インターフェース

@interface TabBarController : UIViewController <UIApplicationDelegate, UITabBarControllerDelegate, UITabBarControllerDelegate>{

    IBOutlet UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end

メインファイル

@implementation TabBarController
    @synthesize tabBarController;

    /*other stuff*/
    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
        NSLog(@"rawr"); 
    }
    /*other stuff*/
@end
于 2015-08-04T12:49:41.013 に答える
0

タブバーのデリゲートを設定するだけです。self.tabBarController.delegate = self;これを行うには、Interface Builder doを(バーではなく)tabbarcontrollerオブジェクトに設定または使用して、接続インスペクターを確認し、ファイルの所有者に接続をドラッグします。

于 2012-06-08T09:40:19.227 に答える
0

タブ バーを合成したので、次のように記述する必要があります。self.tabBarController.delegate = self;

于 2012-06-08T09:21:33.200 に答える
-1

上記のように、機能しない理由は多数あります。ここにはもっと微妙な理由があります。プログラムで UI を作成している場合 (ストーリーボードや Xib を使用しない)、UIWindow の画面を設定する必要があります。

self.window = [[UIWindow alloc] init];
self.window.screen = [UIScreen mainScreen];  // <- The UITabViewController will not
                                             //    accept taps without this.

Xib を使用している場合、これは「起動時にフルスクリーン」を選択するのと同じだと思います。それを確認する必要があります。そうしないと、タブが機能しないことに気付きました。

更新:とにかく、必要に応じて私に反対票を投じてください。ただし、機能しないタブコントローラーがあり、これを機能させるために私がしなければならなかったことです。このページの他の回答はどれも役に立ちませんでした。最近、xib/ストーリーボードを使用することは非常にまれだと思います (これは iOS 5 日からだと思います)。

于 2013-01-25T00:16:44.320 に答える