36 votes

Comment puis-je dynamiquement cacher un bouton à partir d'un point de vue?

Je voudrais dynamiquement cacher un bouton dans l'un de mes points de vue, en fonction de certaines conditions.

J'ai essayé d'ajouter un peu de code pour l'affichage du contrôleur -viewWillAppear méthode, pour faire le bouton caché avant l'affichage de la taille réelle, mais je ne sais toujours pas comment faire.

J'ai une référence à la touche par le biais d'un IBOutlet, mais je ne suis pas sûr de savoir comment aller de l'avant à partir d'ici. Pour référence, c'est un UIBarButtonItem instance.

54voto

Ben Gottlieb Points 59900

Si vous êtes en essayant de cacher un UIBarButtonItem, vous allez effectivement avoir à modifier le contenu de la mère de la barre. Si c'est un UIToolBar, vous aurez besoin de définir la barre d'éléments de tableau dans un tableau qui n'inclut pas votre article.

NSMutableArray     *items = [[myToolbar.items mutableCopy] autorelease];
[items removeObject: myButton];
myToolbar.items = items;

11voto

J'ai donc essayé de Ben approche gagnante mais à la fin je l'ai trouvé mauvais pour ma part - mais je suis sûr que ça dépend de ce que vous essayez de faire. J'ai essayé de montrer une barre de navigation bouton sous certaines conditions seulement, et ensuite se cacher dès que la condition n'était plus remplies (dans mon cas, c'est un bouton "Terminé" utilisé pour masquer le clavier associé à un UITextView. Il ne doit être affiché lorsque l'utilisateur tape dans l'affichage de texte). Mes pas étaient comme suit:

  1. J'ai ajouté un UIBarButtonItem comme un bien dans ma UIViewController classe. Je l'instancier dans le initWithNibName méthode.

  2. Je lui ai donné la UIBarButtonItem propriété que l' rightBarButtonItem dans la barre de navigation en tant que dès que l'utilisateur commence à taper dans l'affichage de texte.

  3. J'ai défini la propriété UIBarButtonItem à néant lorsque l'utilisateur a fini de taper.

Il fonctionne comme un charme. Je suis en ajoutant quelques exemples de code ci-dessous.

D'abord instancier le bouton de mon point de vue contrôleur méthode init:

barButtonItemDone = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];

Puis-je définir comme le droit de la barre de bouton en le délégué de la méthode qui est appelée dès que l'utilisateur commence à modifier l'affichage de texte:

self.navigationItem.rightBarButtonItem=[self barButtonItemDone];

Enfin, lorsque le bouton est cliqué, une méthode appelée "fait" est appelé et je viens de mettre la rightBarButtonItem à néant à l'intérieur de cette méthode:

self.navigationItem.rightBarButtonItem=nil;

10voto

Sara Points 450

Si tout ce que l'on essaie de cacher est le bouton précédent de la barre de navigation, il y a un moyen plus simple:

self.navigationItem.hidesBackButton = YES;

Citation de documentation du développeur:

hidesBackButton

Une valeur Booléenne qui détermine si le bouton de retour est caché.

@property(nonatomic, céder) BOOL hidesBackButton

Discussion

OUI si le bouton de retour est caché lorsque cet élément de navigation est le top point; autrement, NON. La valeur par défaut est NON.

Disponibilité

Disponible dans l'iPhone OS 2.0 et versions ultérieures.

7voto

Michael Surran Points 96

C'est un peu un hack, mais il fonctionne dans mon cas (et il gère correctement dynamique d'espacement):

À cacher:

myButton.width = 0.1;

Pour montrer:

myButton.width = 0.0;

Une largeur de 0,0 "largeur auto", et avec une largeur de 0,1, le bouton disparaît totalement (même pas un "ruban" d'un bouton, même si je n'ai pas essayé sur un affichage de la rétine).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X