2009-10-08 8 views
55

Ich tue dies in einem UIViewController für einen meiner Registerkarten:self.title setzt den Titel von navigationController und tabBarItem? Warum?

self.title = @"Welcome"; 

Allerdings ist es überschreiben, was ich für die tabBarItem haben. Ich habe versucht:

self.tabBarItem.title = @"Home"; 

und

[self.tabBarItem initWithTitle:@"Home" image:[UIImage imageNamed:@"iconHome.png"] tag:0]; 

Aber noch self.title überschreibt die tabBarItem, unabhängig davon, ob ich die beiden letzten Teile des Codes versuche nach der Titel festgelegt wurde. Der Code läuft sogar ohne Fehler, aber die self.tabBarItem.title oder initWithTitle macht nichts?

Antwort

160

OK, dachte ich es aus! Hier ist, was ich tue:

self.title = @"Title for TabBarItem"; // TabBarItem.title inherits the viewController's self.title 
self.navigationItem.title = @"Title for NavigationBar"; 

die navigationBar self.title erben würde, wenn nicht anders festgelegt mit self.navigationItem.title

+0

Ich lief auf genau das gleiche Problem bei der Verwendung eines UINavigationController innerhalb eines UITabController. Das hat es gelöst. –

+3

weiß nicht thy, aber funktioniert nicht für mich :( – cV2

+0

Dies funktioniert für mich. Großartig für die Änderung nur der Top-Titel basierend auf Inhalt, auch wenn der View-Controller nicht ändert. – lilbyrdie

0

Versuchen:

[self setTitle:@"Welcome"]; 

UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Home" image:[UIImage imageNamed: image] tag:0]; 
[self setTabBarItem:item]; 
[item release]; 
+0

Hmm. Funktioniert auch nicht. "Welcome" (Titel für self) ist für die tabBar immer gleich. Sehr frustrierend, eigentlich. Ich sprach mit einem Dev-Freund, der sagte, die einzige Möglichkeit, es anders zu machen, war, den Titel des navigationController in IB zu setzen und dann self.title nicht im Code zu setzen. Aber das scheint nur seltsam. Wenn hier niemand mit einer Lösung kommt, kann ich Apple einen Fehler melden. – runmad

+0

Von Interesse, wo machst du deine Tab-Leiste Setup? Das obige Beispiel stammt von der Init-Methode meines Controllers. Ich verwende keine Schnittstellenerstellung für meine Ansichten (entweder benutzerdefinierte oder in loadView erstellt). Das könnte der Unterschied sein. – Kevin

+0

Ja, ich benutze IB, aber versucht, die Registerkarten in jedem UIViewController (NavigationController) zu initiieren. Ich werde sehen, was passiert, wenn ich den obigen Code in eine init-Methode in der UIViewController ... – runmad

0

Ich war auch das gleiche Problem konfrontiert, aber ich lösen dieses Problem wie folgt. Ich habe den Titel und das Bild von tabBarItem direkt nachdem ich sie in appDelegate erstellt habe.

Dies ist, was ich getan habe:

[viewController setTitle:@"controllerTitle"]; 
[[viewController tabBarItem] setTitle:@"Custome Title for tab"]; 
[[viewController tabBarItem] setImage:[UIImage imageNamed:@"tab.png"]]; 
52
//set nav item title 
self.navigationController.navigationBar.topItem.title = @"zurück"; 

das es für mich getan hat: =) (nichts von dem oben gearbeitet hat)

Verwandte Themen