2012-06-08 7 views
7

In meiner Header-Datei zu funktionieren ich diese:tabBar didSelectItem scheint nicht

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

    IBOutlet UITabBarController *tabBarController; 

} 

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

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

@end 

In meiner Haupt-Datei, die ich diese:

@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 

Ich habe bereits angeschlossen meine tabbarcontroller als Delegierten zu der Besitzer meiner Datei in Interface Builder, aber es ruft immer noch nicht die didSelectItem Methode.

Gibt es irgendetwas, das ich hier vermisse?

Ich habe bereits hinzugefügt tabBarController.delegate = self; und es funktioniert immer noch nicht.

+1

Was ist, wenn Sie es programmgesteuert machen? I. e., 'TabBarController.delegate = self;'? –

+0

es funktioniert stil nicht :( –

Antwort

1

Sie müssen dies hinzufügen:

tabbarcontroller.delegate = self; 
+0

versucht Zugabe: - (void) {viewDidLoad \t [super viewDidLoad]; \t tabBarController.delegate = self; \t self.view = tabBarController.view; } noch nicht –

0

Sie haben die Tab-Leiste synthetisiert, so dass Sie jetzt schreiben müssen: self.tabBarController.delegate = self;

+0

arbeiten Zugabe versucht: - (void) {viewDidLoad \t [super viewDidLoad]; \t self.tabBarController.delegate = self; \t self.view = tabBarController.view; } funktioniert immer noch nicht –

0

einfach die Delegierten für die Tab-Leiste gesetzt. Sie können dies tun, indem Sie self.tabBarController.delegate = self; setzen oder den Interface-Builder mit dem tabbarcontroller-Objekt (nicht bar) verwenden, siehe Verbindungsinspektor und ziehen Sie die Verbindung auf den Besitzer der Datei.

+0

bereits getan, aber immer noch nicht funktioniert –

+0

Wahrscheinlich habe ich herausgefunden. Wenn Sie möchten, dass die Methode - (void) tabBar: (UITabBar *) tabBar didSelectItem: (UITabBarItem *) Element; Sie sollten die tablet-delegate-Eigenschaft auf self setzen. Also versuche so etwas wie self.tabBarController.tabBar.delegate = self; – Andrea

+0

es funktioniert nicht, wenn ich self.tabBarController.tabBar.delegate = self; in viewDidLoad. es gibt mir einen Fehler Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInternalInconsistencyException', Grund: 'Ändern des Delegaten einer Tab-Leiste, die von einem Tab-Leiste-Controller verwaltet wird nicht erlaubt.' –

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

Diese Methode ist eine delegierte Methode für UITabBar, nicht UITabBarController, so

self.tabBarController.delegate = self; 

wird nicht funktionieren.

Tab Bar-Controller verfügt über einen eigenen UITabBar, aber die Delegierten einer Tab-Leiste durch eine Tab-Leiste Controller verwaltet Wechsel ist nicht erlaubt, so versuchen Sie nur UITabBarControllerDelegate Methode wie folgt:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
+4

Vergessen Sie nicht, '' zu der .h Ihres App-Delegaten hinzuzufügen und etwas wie 'UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; tabBarController.delegate = self; 'in der Methode' didFinishLaunchingWithOptions'. – Patrick

-1

Es gibt viele Gründe, wie oben erwähnt, warum es möglicherweise nicht funktioniert. Hier ist ein subtilerer Grund. Wenn Sie Ihre Benutzeroberfläche programmatisch erstellen (kein Storyboard oder Xib), müssen Sie den Bildschirm Ihres UIWindow einstellen.

Wenn Sie ein Xib verwenden, glaube ich, dass dies gleichbedeutend mit "Full Screen at Launch" ausgewählt ist. Das muss überprüft werden oder ich habe bemerkt, dass meine Tabs nicht funktionieren.

Update: Was auch immer, down-vote mich, wenn Sie müssen, aber ich hatte eine nicht funktionierende Registerkarte Controller und das ist, was ich tun musste, um es zum Laufen zu bringen. Keine der anderen Antworten auf dieser Seite hat mir geholfen. Ich nehme an, dass die Verwendung eines XIB/Storyboards heutzutage ziemlich selten ist (ich glaube, das war von iOS 5 Tage), aber hier für die Person zu verlassen, die diese Situation tut und stolpert.

1

Verwenden UITabBarControllerDelegate statt UITabBarDelegate und
-tabBarController:didSelectViewController{} statt tabBar:didSelectItem{}

Schnittstelle

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

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

Hauptdatei

@implementation TabBarController 
    @synthesize tabBarController; 

    /*other stuff*/ 
    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 
     NSLog(@"rawr"); 
    } 
    /*other stuff*/ 
@end 
+1

Ich bin gerade auf dieses Problem selbst gestoßen, und diese Lösung funktioniert perfekt. Vielen Dank! – CodeNoob

Verwandte Themen