2010-06-04 4 views
12

J'ai un UIToolbar que j'ai configuré en utilisant IB avec trois boutons, gauche, milieu et droit. Dans certaines situations, je n'aimerais pas afficher le bouton du milieu. Est-ce que quelqu'un connaît un moyen de cacher un bouton spécifique à l'intérieur d'un UIToolBar? Il n'y a pas de propriété hide, tout ce que je peux trouver est setEnable mais cela laisse toujours le bouton qui amène les utilisateurs à se demander quel est son but. Je voudrais seulement l'afficher dans des situations où il a vraiment un usage.Masquer UIToolbar UIBarButtonItems

Merci d'avance!

Répondre

28

Reset the items:

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

Vous pouvez obtenir les articles en cours en utilisant la propriété items, puis retirez simplement celui que vous ne voulez pas montrer et passer dans la nouvelle NSArray.

Comme vous pouvez le voir, vous pouvez également l'animer pour le rendre clair pour l'utilisateur.

+0

Eh oui, cela fonctionne. Pour une raison quelconque, j'ai d'abord pensé que ce ne serait pas le cas, mais c'est le cas. Merci! – jmurphy

+0

@jmurphy: De rien! Je suis content que vous l'ayez travaillé. –

+6

Semble trop de travail juste pour cacher un bouton, mais cela fonctionne. –

6

Voici comment je l'ai fait .. trop des maux de tête, mais son meilleur que je pouvais venir avec:

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

Cela ne fonctionne pas ici parce que le tableau que vous envoyez avec setItem n'est pas ce que la fonction attend.

J'ai dû remplacer la ligne:

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

avec celui-ci:

NSArray *finalTabBarArray = [newToolBarArray copy]; 

Ensuite, il fonctionne parfaitement.

0

La réponse de Mohit est celle que j'ai utilisée, mais vous n'avez pas besoin de faire spécifiquement un NSArray que la barre d'outils définit. Vous pouvez simplement définir le tableau d'éléments en tant que NSMutableArray. Aucun avantage réel dont je suis conscient mais c'est quelques lignes moins de code. Et ainsi, vous pouvez prendre le tableau et déplacer les objets UIButton comme vous le feriez pour n'importe quel autre tableau avec des objets, puis réinitialiser simplement la barre d'outils avec ce tableau mutable.

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

Plutôt que de deviner l'indice, j'ai ajouté un IBOutlet pour le UIBarButtonItem puis retiré par son nom:

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

Et bien sûr, il aide à relier les points de vente dans le concepteur :)

+0

bien concis Nico, même avec la dénomination variable non orthodoxe pour vos propriétés.Typiquement, le "_" est associé aux variables auto-synthétisées et non à la propriété elle-même. ;) –

1

Je sais qu'il est assez vieux fil pour mais ceux qui regardent cette page pour la solution, ici vous allez:

Avec iOS 7, vous pouvez utiliser cette approche pour afficher/masquer votre mégot de barre d'outils sur:

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