2012-12-04 11 views
5

Wiem, że to bardzo powtarzalny temat, ale nie mogę go uruchomić.TabBarController didSelectViewController nie działa

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

} 

nie mogę znaleźć to, czego mi brakuje, każda pomoc będzie mile widziane.

Teraz staram się połączyć je w MainStoryBoard:

enter image description here

enter image description here

Ale nie robi praca, jakie są połączenia?

+0

Jak stworzyliśmy 'obiektu MainTab' ?? –

+0

@Rob Tak, masz rację - jakoś przeoczyłem część "kontrolera", myśląc, że to niestandardowy kontroler z elementem paska kart. Usunąłem swój komentarz i głosowałem za szczegółową odpowiedzią. – dasblinkenlight

Odpowiedz

15

Na podstawie swojej @interface (i swojej późniejszej zrzutu ekranu), MainTab jest UITabBarController, więc następujący wiersz:

self.tabBarController.delegate = (id)self; 

powinny być tylko:

self.delegate = self; 

nie robić chcesz mieć własność tabBarController w samym UITabBarController, ani nie chcesz używać składni self.tabBarController. Ta składnia jest używana tylko wtedy, gdy próbujesz odwołać się do kontrolera paska kart z jednego z jego kontrolerów podrzędnych. Będąc w samym sterowniku paska kart, po prostu odwołaj się do self.


Tak więc działać, jeśli MainBar jest zdefiniowany jako:

// MainBar.h 

#import <UIKit/UIKit.h> 

@interface MainBar : UITabBarController 

@end 

I

// 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 

I nie zapomnij, aby ustawić klasę sterownika bar zakładka:

interface builder

Inspektor połączenia (gdzie nie dotknąć niczego) wygląda następująco:

outlets

+0

to, co powiedziałeś, jest całkiem interesujące, ale nadal nie działa – user1256477

+0

Nie, nie mogę! kiedy próbuję kontrolować + przeciągnąć przesunąłem TabItems – user1256477

+1

MainTab został poprawnie ustawiony, miałem NSLog, aby to sprawdzić, został rozwiązany z kodem – user1256477