10

Ho un'applicazione che gira su un UINavigationController. Ora vorrei aggiungere un elemento UIToolbar nella parte inferiore di ogni schermata. La barra degli strumenti in basso dovrebbe essere personalizzabile per il ViewController che viene attualmente visualizzato. La mia prima idea era quella di aggiungere semplicemente la barra degli strumenti alla vista navigationController e taggarla, nel viewController pensavo che avrei quindi potuto recuperare l'elemento UIToolbar. Ho il seguente codice:UIToolbar su ogni pagina di UINavigationController

Nel mio AppDelegate:

// Get instance of Toolbar (navController is an instance of UINavigationController and TOOLBAR_TAG a constant) 
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 440, 320, 40)]; 
toolbar.tag = TOOLBAR_TAG; 
[navController.view addSubview:toolbar]; 

Nel mio viewController ho provato questo:

UIToolbar *toolbar = [self.navigationController.view viewWithTag:TOOLBAR_TAG]; 
toolbar.barStyle = UIBarStyleBlack; 

Eppure questo mi dà un errore dicendo che barra degli strumenti nel mio caso è un " UILayoutContainerView "oggetto, non un oggetto UIToolbar. Quindi questa idea sembra essere un vicolo cieco.

In che modo gli altri hanno risolto questo problema?

risposta

40

UINavigationController dispone già di una barra degli strumenti. Basta usare

[self.navigationController setToolbarHidden:NO]; 

nel più alto controller della vista e

[self setToolbarItems:items]; 

in tutti i controller di vista, dove gli oggetti è un NSArray di elementi della barra degli strumenti del controller della vista.

EDIT: Per quanto riguarda il motivo per cui la soluzione non funziona: il tuo TOOLBAR_TAG non è probabilmente unica, è per questo che stai ricevendo un'altra visualizzazione secondaria. Ma come ho detto, dovresti comunque usare la barra degli strumenti inclusa.

+1

Wow, è un servizio che non mi aspettavo, ho anche cercato la documentazione ma non l'ho trovato. Molto bello, grazie! – Robin

+0

prego. =) è nella documentazione di UINavigationController, btw: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/occ/instp/UINavigationController/toolbar –

+1

È possibile sovrascrivere il metodo pushController di UINavigationController per evitare di copiare/incollare e impostare qui gli elementi della barra degli strumenti. –

1

Per visualizzare facilmente la barra degli strumenti inferiore di UINavigationController, è possibile fare clic sulla casella di controllo "Mostra barra degli strumenti" che è raggiungibile dall'ispettore con l'oggetto "Navigatore" selezionato. Spero che questo possa essere d'aiuto :)

0

Dal punto di vista del design non lo consiglierei a meno che non si sappia che la barra degli strumenti sarà presente per ogni vista nello stack. Il secondo in cui nascondi/mostri la barra degli strumenti per le diverse viste nello stack vedrai che quell'animazione (la barra degli strumenti scorre verso l'esterno/in avanti con le viste) non si anima come ti aspetti.

Se sono necessarie barre degli strumenti per viste specifiche, inserirle in tali viste, poiché la barra degli strumenti è contestuale alla vista, non allo stack di nav nel suo complesso.

Problemi correlati