Comment désactiver l'état de contrôle de surbrillance d'un UIButton?


147

J'ai un UIButton qui, lorsqu'il est sélectionné, ne devrait pas changer d'état lorsqu'il est touché. Le comportement par défaut est qu'il soit dans UIControlStateHighlighted tout en étant touché, et cela me met en colère.

Suggestions?

Réponses:


313

Votre bouton doit avoir sa valeur buttonTypePersonnalisée.

Dans IB, vous pouvez décocher "Highlight ajuste l'image".

Vous pouvez utiliser par programme theButton.adjustsImageWhenHighlighted = NO;

Des options similaires sont également disponibles pour l'état "désactivé".


1
Avez-vous une chance de savoir quelle serait la version programmatique de cela? En ce moment, je le fais fonctionner de manière hackly en le désactivant et en l'habillant comme étant sélectionné.
kbanman

99
uibutton.adjustsImageWhenHighlighted = NON;
Haydn

43
Assurez-vous également que le type de bouton est réglé sur PERSONNALISÉ. (Comme Mosib Asad l'a mentionné dans une autre réponse)
Vlad Lego

Génial!!! juste un petit changement évident que j'ai manqué !!! J'avais défini le type de classe UIButton sur MyCustomClass mais j'aurais oublié de changer celui-ci. Donc, cela donnait un effet surligné au bouton non sélectionné. Merci une fois de plus.
Vinod Supnekar

38

En plus de la réponse ci-dessus consistant à décocher «la mise en évidence ajuste l'image» dans IB, assurez-vous que le type de bouton est défini sur PERSONNALISÉ.


2
C'était la pièce manquante: le type de bouton CUSTOM. Merci!
JOM

1
Que faire si je souhaite conserver un UIButton système? puis-je supprimer la surbrillance ajuste l'image?
Amjad Husseini

36

Cela fonctionnera pour vous:

[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];

La troisième ligne est le truc ici ...

Cela fonctionne de la même manière pour la configuration de l'image / backgroundImage


1
Cela fonctionne parfaitement pour moi. La adjustsImageWhenHighlightedpropriété de UIButtonsemble affecter uniquement l'image d'arrière-plan.
Michael Thiel

Sachez que si vous décidez d'attribuer une image à «l'état désactivé», vous n'appelez pas setBackgroundImage. À la place, vous devez effectuer les opérations suivantes [setImage de bouton: image forState: UIControlStateDisabled]; Sachez également que, comme indiqué dans ce fil, la propriété UIButton ajustsImageWhenHighlighted affecte uniquement l'image d'arrière-plan.
HamasN


23
button.adjustsImageWhenDisabled = NO;

est également utile pour avoir votre propre apparence d'un bouton désactivé.


5

En fonction de ce qui change de l'état par défaut à l'état en surbrillance du bouton, vous pouvez appeler quelques méthodes pour les définir selon vos besoins. Donc, si l'image change, vous pouvez le faire

[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];

Si le texte change, vous pouvez faire

[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

autres fonctions similaires:

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state


setTitleColor est tout ce dont j'avais besoin pour désactiver la surbrillance sur le texte d'
uibutton

3

OK, voici une solution simple si cela fonctionne pour vous, après une semaine à me cogner la tête, il m'est finalement venu à l'esprit de simplement mettre en surbrillance = NON pour la 1ère ligne de la méthode IBAction pour TouchUpInside ou TouchDown, ou tout ce qui fonctionne. Pour moi, c'était bien sur le TouchUpInside.

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}

3

Pour Swifty Developer -

yourButton.adjustsImageWhenHighlighted = false

3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

2

juste deux choses:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;

2

J'ai eu un problème similaire et j'ai constaté que "décocher" Efface le contenu graphique dans le générateur d'interface a résolu mon problème

entrez la description de l'image ici


2

faites votre bouton Type - "Personnalisé" et décocher - En surbrillance Ajuster l'image et vous avez terminé.


-3

évitez de définir le saut de ligne d'UIButton sur Clip , utilisez à la place le standard Truncate Middle

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.