36 votes

UIButton dans UITableViewCell

J'ai un UIButton avec une image à l'intérieur d'un UITableViewCell. Lorsque la cellule est mise en surbrillance, le bouton passe également en surbrillance (c'est-à-dire que l'image prend une teinte plus foncée), que l'utilisateur clique ou non dans les limites du bouton.

Je ne veux pas de cette fonctionnalité - je veux seulement que le bouton soit mis en évidence lorsque le bouton est cliqué, et non lorsque la cellule entière est cliquée.

J'ai essayé de faire en sorte que l'image en surbrillance soit la même que l'image normale. Cela résout le problème mais empêche le bouton de changer de couleur lorsqu'il est vraiment en surbrillance.

Des idées pour obtenir l'effet désiré ?

57voto

codecaffeine Points 755

Ça me rendait fou. J'ai découvert que vous devez remplacer setHighlighted:animated : et setSelected:animated :

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];
    self.yourButton.highlighted = NO;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
    self.yourButton.selected = NO;
    // If you don't set highlighted to NO in this method,
    // for some reason it'll be highlighed while the 
    // table cell selection animates out
    self.yourButton.highlighted = NO;
}

2voto

joshpaul Points 883

Une approche consisterait à "désélectionner" ou à "déséclaircir" le bouton lorsque la cellule de la vue tableau est sélectionnée :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  [yourButton setHighlighted:NO];
  // do something cool
}

1voto

Oberdan Nunes Points 169

J'ai utilisé une approche différente, c'est un peu plus facile, j'espère que ça marchera pour vous. Il suffit de définir l'état en surbrillance du bouton à false dans les deux méthodes déléguées ci-dessus :

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    UIButton *btnAction = (UIButton *) [[tableView cellForRowAtIndexPath:indexPath] viewWithTag:3];
    btnAction.highlighted = NO;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIButton *btnAction = (UIButton *) [[tableView cellForRowAtIndexPath:indexPath] viewWithTag:3];
    btnAction.highlighted = NO;
}

0voto

Ertebolle Points 1754

Je n'ai pas encore essayé, mais vous pourriez peut-être ajouter une cible/action au bouton pour UIControlEventTouchDown qui mettrait à jour son image d'état en surbrillance comme vous le souhaitez, puis une autre cible/action pour UIControlEventTouchUpInside / UIControlEventTouchUpOutside / UIControlEventTouchCancel qui réinitialiserait l'image en surbrillance pour qu'elle corresponde à l'image d'état normal ?

0voto

AppUs Points 6156

Une solution possible serait de définir le style de sélection des cellules comme étant nul. Dans ce cas, lorsque vous sélectionnez la cellule, elle ne sera pas mise en évidence.

Il s'agit uniquement d'une solution de rechange possible. Vous avez peut-être d'autres idées en tête.

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