5 votes

Masquer un UIButton créé par programme pour une balise

Actuellement, j'ai 14 boutons créés par programme en utilisant une boucle for, code ci-dessous :

int buttonCount = 14;
for (int i=0; i< buttonCount; i++) {             

//Create titleString from array object
    NSString *stringFromInt = [NSString stringWithFormat:@"%@",[arrayForRound objectAtIndex:i]];

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

        [button addTarget:self
                   action:@selector(buttonSelected:)
         forControlEvents:UIControlEventTouchDown];

        [button setTitle:stringFromInt forState:UIControlStateNormal];

        button.titleLabel.font = [UIFont fontWithName:@"helvetica" size:19];
        button.tag = i;

        [self.view addSubview:button];
}

Cela fonctionne très bien pour créer les boutons, je peux ensuite remplir la boîte de réponse avec la valeur du bouton sélectionné :

-(void)buttonSelected: (UIButton *)sender
{
[_buttonOne setTitle:sender.titleLabel.text forState:UIControlStateNormal];
}

Cependant, une fois que le bouton a été rempli, je voudrais le supprimer de l'écran. Si j'appelle button.hidden, cela masque simplement le dernier bouton qui a été créé par programme. Je suis conscient de l'existence de button.tag et j'ai essayé de l'utiliser, mais j'ai l'impression que je dois faire quelque chose comme ça :

//Hide button for tag (i know this is incorrect syntax)
button for buttonTag: 3 setHidden;

Existe-t-il quelque chose de similaire ou un moyen de le faire ?

Mise à jour

Le bouton que j'essaie de masquer est celui qui a été créé par programme. Je veux donc que _buttonOne prenne le titre du bouton créé (appelons-le letterButton), puis que letterButton soit caché de la vue,

UIButton *yourBtn = (UIButton *)[self.button viewWithTag:3];
[yourBtn setHidden:YES];
(code posted by Oh Seung Kwon)

Ce code fonctionne parfaitement mais il cache le mauvais ensemble de boutons. (Il masque _buttonOne et non letterButton).

Je me demande s'il ne serait pas mieux de créer les 12 boutons en nib et de les nommer manuellement... Il n'y en aura jamais plus ou moins que 12.

9voto

Jacob Relkin Points 90729

Lorsque l'on appuie sur votre bouton, vous pouvez définir la fonction hidden de la méthode d'action sender qui est le bouton qui a effectivement été tapé. Ceci cachera le bouton qui a été tapé.

- (void)buttonSelected:(UIButton *)sender {
   [_buttonOne setTitle:sender.titleLabel.text forState:UIControlStateNormal];
   [sender setHidden:YES];
}

Si vous voulez récupérer le bouton avec le tag de 3 vous pouvez utiliser ce code à la place :

[[self.view viewWithTag:3] setHidden:YES];

Je ne vous recommande pas d'utiliser le tag vous devez utiliser l'Interface Builder et une propriété IBOutletCollection à la place.

2voto

Oh Seung Kwon Points 198

Comme ceci

UIButton *yourBtn = (UIButton *)[self.view viewWithTag:3];
[yourBtn setHidden:YES];

1voto

junkor Points 242

Vous pourriez obtenir la vue par tag utiliser ce message.

[self.view viewWithTag:3];

Nous utilisons toujours une balise spécifique par macro, comme

#define kFirstButtonTag (100)

ou utiliser

#define kButtonBeginTag (100)

Ensuite, utilisez la macro pour obtenir le tag.

Et dans un numéro spécial - La casse 0, 1 ou 2 est toujours utilisée, commencer votre balise dans un numéro spécial pourrait éviter certains problèmes.

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