5

これが非常に繰り返されるトピックであることは知っていますが、うまくいきません。

MainTab.h:

#import <UIKit/UIKit.h>

@interface MainTab : UITabBarController<UITabBarControllerDelegate, UITabBarDelegate> {

     IBOutlet UITabBarController *tabController;

}

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

@end

MainTab.m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    NSLog(@"main tab"); 
    [super viewDidLoad];

    self.tabBarController.delegate = (id)self;
    [self setDelegate:self];

    // Do any additional setup after loading the view.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}


-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{

    NSLog(@"selected %d",tabBarController.selectedIndex);

}

不足しているものが見つかりません。助けていただければ幸いです。

今、それを MainStoryBoard にリンクしようとしています:

ここに画像の説明を入力

ここに画像の説明を入力

しかし、それは機能しません、接続は何ですか?

4

1 に答える 1

16

@interfaceあなた(およびその後の画面スナップショット)に基づいて、MainTabUITabBarController、なので、次の行になります。

self.tabBarController.delegate = (id)self;

あるべきです:

self.delegate = self;

、自体にtabBarControllerプロパティは必要ありません。また、構文を使用する必要もありません。この構文は、子コントローラーの1つからタブバーコントローラーを参照しようとしている場合にのみ使用します。タブバーコントローラ自体にある場合は、を参照してください。UITabBarControllerself.tabBarControllerself


したがって、次のようにMainBar定義されている場合に機能します。

//  MainBar.h

#import <UIKit/UIKit.h>

@interface MainBar : UITabBarController

@end

//  MainBar.m

#import "MainBar.h"

@interface MainBar () <UITabBarControllerDelegate>

@end

@implementation MainBar

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.delegate = self;
}

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"selected %d",tabBarController.selectedIndex);
}

@end

また、タブバーコントローラーのクラスを設定することを忘れないでください。

インターフェイスビルダー

接続インスペクター(私が物に触れなかった場所)は次のようになります。

アウトレット

于 2012-12-04T16:31:33.973 に答える