2010-07-29 6 views
7

Momentan setze ich den Titel in der viewDidLoad der Stammansicht der Registerkarte, die sich nur ändert, wenn ich auf die Registerkarte klicke. Ich möchte, dass dies eingestellt wird, bevor ich die Registerkarte wähle. Ich habe versucht, so etwas wie:iPhone Objective-C: Programmatisch den Titel des Tab-Bar-Elements in der Tab-Leiste ändern, die mit IB erstellt wurde?

[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2] title] = @"string"; 

in der ersten Ansicht, dass Belastungen in einem anderen Register, aber es ist eindeutig etwas falsch, da ich einen linken Operanden Fehler.

Kann mir jemand den richtigen Weg zeigen, um das zu erreichen, was ich versuche?

Vielen Dank !!

Antwort

3

Versuchen Sie, den Titel in watchFromNib anstelle von viewDidLoad festzulegen. Die Ansicht für einen Ansichts-Controller wird erst dann tatsächlich geladen, wenn Sie die Ansicht benötigen, und der Tab-Leiste-Controller greift standardmäßig nicht auf die Ansicht eines Ansicht-Controllers zu, bis Sie ihn tatsächlich auswählen (weshalb Sie den Titel bei der Auswahl geändert haben) die Registerkarte).

Da die Nib den View-Controller erstellt, mit dem Sie beginnen (vorausgesetzt, Sie haben Ihren Tab-Bar-Controller in IB erstellt), wird wakeFromNib aufgerufen, sobald der View-Controller erstellt wurde, bevor der Tab-Controller fragen kann Titel ist.

+0

Whoa, das hat wie Magie funktioniert. Ich wusste nicht einmal, dass wakeFromNib sogar eine Option für ViewController-Methoden war. (Jeden Tag etwas Neues lernen!) Danke! –

+0

wakeFromNib ist eine Option für jedes Objekt, das von einer Nib geladen wird - der Nib-Loader sucht nach dieser Methode für jedes Objekt, das es erstellt, und ruft es auf, wenn es gefunden wird. Beachten Sie, dass Sie die initWithNibName: -Methode auch überschreiben müssen, wenn Sie manchmal aus der xib und manchmal aus Code Code erstellen. –

4
[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2] title] = @"string"; 

Die Syntax ist etwas daneben. Sie wollten wohl so etwas wie:

[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2].title = @"string"; 

jedoch, die nicht funktionieren, da es keine title Eigenschaft einzustellen. In der Tat kann ich den Titel eines UITabBarItem, sobald er initialisiert wurde, nicht ändern. Sie müssen UITabBarsetItems:animated: Methode verwenden, um die gesamte Gruppe von Elementen auf einmal festzulegen. Aber es wird keinen Spaß machen.

Ich wette, das wäre ein Apple HIG-Verstoß, weshalb es keinen einfachen Weg gibt, es mit der aktuellen API zu tun. Überdenken Sie Ihr Design und fragen Sie sich, warum Sie die Namen der Registerkarten ändern möchten, was Ihre Benutzer verwirren wird.

+0

Vielen Dank für Ihre Antwort! Ich baue gerade eine App mit der Foursquare-API, und mir ist aufgefallen, dass in der Foursquare iPhone-App einer der Registerkartennamen auf den Vornamen des Benutzers gesetzt ist, also habe ich mich gefragt, wie sie das gemacht haben könnten. –

+0

Wahrscheinlich tun sie es bei der Initialisierung der UITabBar, wenn die Anwendung gestartet wird. –

Verwandte Themen