2010-07-29 18 views
7

Al momento, sto impostando il titolo nel viewDidLoad della vista root della scheda, che cambia solo quando clicco sulla scheda. Voglio che questo sia impostato prima di selezionare la scheda. Ho provato qualcosa di simile:iPhone Objective-C: modifica del titolo dell'elemento sulla barra delle schede nella barra delle schede creata usando IB?

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

nella prima vista che i carichi in un'altra scheda, ma c'è chiaramente qualcosa di sbagliato in quanto ottengo un errore operando sinistro.

Qualcuno può mostrarmi il modo corretto per ottenere ciò che sto cercando di fare?

Grazie !!

risposta

3

Provare a impostare il titolo in awakeFromNib anziché viewDidLoad. La vista per un controller di visualizzazione non viene effettivamente caricata finché non è necessaria la vista e il controller della barra delle schede per impostazione predefinita non accede alla vista di un controller di visualizzazione finché non lo selezioni effettivamente (motivo per cui hai visto il cambio di titolo quando hai selezionato la scheda).

Poiché il pennino sta creando il controller di visualizzazione per iniziare (supponendo che tu abbia costruito il controller della barra delle schede in IB) awakeFromNib verrà chiamato non appena il controller di visualizzazione è stato creato, prima che il controller della barra delle schede possa chiedere quali il titolo è

+0

Whoa, quello ha funzionato come per magia. Non sapevo nemmeno che WakeFromNib fosse addirittura un'opzione per i metodi viewController. (Imparare qualcosa di nuovo ogni giorno!) Grazie !! –

+0

awakeFromNib è un'opzione per qualsiasi oggetto caricato da un pennino: il caricatore pennino cerca quel metodo su qualsiasi oggetto che crea e lo chiama se trovato. Nota che se crei roba qualche volta dallo xib e qualche volta dal codice, dovrai anche eseguire l'override del metodo initWithNibName :. –

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

La sintassi è leggermente disattivata qui. Probabilmente voleva qualcosa di simile:

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

Tuttavia, che non funziona, dal momento che non v'è alcun title proprietà da impostare. In effetti, non c'è modo che io possa vedere per cambiare il titolo di UITabBarItem una volta che è stato inizializzato. Dovrai utilizzare il metodo per impostare l'intero gruppo di elementi contemporaneamente. Ma non sarà divertente.

Scommetto che questa sarebbe una violazione di Apple HIG, motivo per cui non esiste un modo semplice per farlo con l'API corrente. Ripensa il tuo design e chiediti perché vuoi modificare i nomi delle schede, che confonderanno i tuoi utenti.

+0

Grazie per la vostra risposta! Attualmente sto sviluppando un'applicazione con l'API Foursquare e ho notato che l'app per iPhone di Foursquare ha uno dei nomi delle schede impostato sul primo nome dell'utente, quindi mi chiedevo come avrebbero potuto farlo. –

+0

Probabilmente lo fanno durante l'inizializzazione di UITabBar all'avvio dell'applicazione. –

Problemi correlati