2010-06-04 7 views
12

Ho un UIToolbar che ho impostato usando IB con tre pulsanti, sinistra, centrale e destra. In alcune situazioni mi piacerebbe non visualizzare il pulsante centrale. Qualcuno sa di un modo per nascondere un pulsante specifico all'interno di un UIToolBar? Non esiste alcuna proprietà nascosta, tutto ciò che posso trovare è setEnable, ma questo lascia comunque il pulsante che induce gli utenti a chiedersi quale sia il suo scopo. Mi piacerebbe mostrarlo solo in situazioni che ha effettivamente un uso.Nascondi UIToolbar UIBarButtonItems

Grazie in anticipo!

risposta

28

Reset the items:

-(void)setItems:(NSArray *)items animated:(BOOL)animated 

È possibile ottenere le voci correnti utilizzando la proprietà items, quindi è sufficiente rimuovere quello che non si vuole mostrare e passare nella nuova NSArray.

Come puoi vedere, puoi anche animarlo per renderlo chiaro all'utente.

+0

Ahh sì, questo funziona. Per qualche motivo, inizialmente pensavo che non sarebbe successo, ma lo è. Grazie! – jmurphy

+0

@jmurphy: Prego! Sono contento che tu abbia funzionato. –

+6

Sembra troppo lavoro solo per nascondere un pulsante ma funziona. –

6

Questo è quanto ho fatto .. troppo mal di testa, ma la sua il meglio che potessi venire con:

NSArray *toolBarArray = toolBar.items; 
NSMutableArray *newToolBarArray = [NSMutableArray arrayWithArray:toolBarArray]; 
[newToolBarArray removeObjectAtIndex:2]; 
[newToolBarArray removeObjectAtIndex:1]; 
//remove whatever buttons you want to. 

NSArray *finalTabBarArray =[[NSArray alloc] initWithObjects:newToolBarArray, nil]; 
[toolBar setItems:[finalTabBarArray objectAtIndex:0] animated:NO]; 
1

Questo non funziona qui perché la matrice che si sta inviando con setItem non è quello che la funzione si aspetta.

ho dovuto sostituire la riga:

NSArray *finalTabBarArray = [[NSArray alloc] initWithObjects:newToolBarArray, nil]; 

con questo:

NSArray *finalTabBarArray = [newToolBarArray copy]; 

allora funziona perfettamente.

0

La risposta di Mohit è quella che ho usato, ma non è necessario specificarlo come NSArray impostato dalla barra degli strumenti. Puoi semplicemente impostare la serie di elementi come un NSMutableArray. Nessun vantaggio reale di cui sono consapevole, ma è un codice di poche righe in meno. In questo modo puoi prendere la matrice e spostare gli oggetti UIButton come faresti con qualsiasi altro array con gli oggetti e quindi ripristinare la barra con quella matrice mutabile.

[newToolBarArray removeObjectAtIndex:2]; 
[newToolBarArray removeObjectAtIndex:1]; 
[toolBar setItems:newToolBarArray]; 
12

Invece di indovinare l'indice, ho aggiunto un IBOutlet per l'UIBarButtonItem e poi rimosso per nome:

NSMutableArray *toolBarButtons = [self._toolbar.items mutableCopy]; 
[toolBarButtons removeObject:self._selectButton]; // right button 
[self._toolbar setItems:toolBarButtons]; 

E naturalmente aiuta a collegare i punti vendita nella finestra di progettazione :)

+0

Nico ben conciso, anche con la variabile non ortodossa che definisce le proprietà.In genere "_" è associato alle variabili auto-sintetizzate e non alla proprietà stessa. ;) –

1

so che è abbastanza vecchio per filo, ma chi cerca questa pagina per soluzione, qui si va:

Con iOS7, è possibile utilizzare questo metodo per mostrare/nascondere la barra degli strumenti di culo on:

if(// your code Condition) 
{ self.toolbarBtn1.enabled = YES; 
self.toolbarBtn1.tintColor = nil; } 
else 
{ self.toolbarBtn1.enabled = NO; 
self.toolbarBtn1.tintColor = [UIColor clearColor]; }