2010-06-04 12 views
12

Tengo una UIToolbar que configuré usando IB con tres botones, izquierda, centro y derecha. En algunas situaciones, me gustaría no mostrar el botón del medio. ¿Alguien sabe de una forma de ocultar un botón específico dentro de una UIToolBar? No hay ninguna propiedad hide, todo lo que puedo encontrar es setEnable, pero esto aún deja el botón y los usuarios se preguntan cuál es su propósito. Me gustaría mostrarlo solo en situaciones que realmente tenga un uso.Ocultar UIToolbar UIBarButtonItems

¡Gracias de antemano!

Respuesta

28

Reset the items:

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

Usted puede conseguir los artículos actuales que utilizan la propiedad items, a continuación, sólo quitar el que no desea mostrar y transmitir en el nuevo NSArray.

Como puede ver, también puede animarlo para que quede claro para el usuario.

+0

Ahh sí, esto funciona. Por alguna razón, originalmente pensé que no, pero lo hace. ¡Gracias! – jmurphy

+0

@jmurphy: ¡De nada! Me alegra que lo tengas funcionando. –

+6

Parece demasiado trabajo solo para ocultar un botón, pero funciona. –

6

Esta es la forma en que lo hice .. demasiado dolor de cabeza, pero su lo mejor que pude llegar a:

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

Esto no funciona aquí porque la matriz que va a enviar con setItem no es lo que la función espera

que tuvieron que reemplazar la línea:

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

con éste:

NSArray *finalTabBarArray = [newToolBarArray copy]; 

entonces funciona perfectamente.

0

La respuesta de Mohit es una que he usado, pero no es necesario que sea específicamente un NSArray que establece la barra de herramientas. Puede establecer la matriz de elementos como NSMutableArray. No tengo ninguna ventaja real de la que sea consciente, pero es un código de pocas líneas menos. Y de esa manera puede tomar la matriz y mover objetos UIButton como lo haría con cualquier otra matriz con objetos y luego simplemente restablecer la barra de herramientas con esa matriz mutable.

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

En vez de adivinar el índice, añadí un IBOutlet para la UIBarButtonItem y luego se retira por su nombre:

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

Y, por supuesto que ayuda a conectar los puntos de venta en el diseñador :)

+0

Nico muy conciso, incluso con el nombre variable no ortodoxo para sus propiedades.Normalmente, el "_" está asociado con las variables auto-sintetizadas y no con la propiedad en sí. ;) –

1

sé que es bastante viejo hilo para los que miran, pero esta página para la solución, aquí van:

con iOS7, puede utilizar este método para mostrar/ocultar la barra de herramientas a su tope en:

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

Cuestiones relacionadas