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?

kbanman
la source

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é".

Haydn
la source
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É.

Mosib Asad
la source
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

Manish Ahuja
la source
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
26
adjustsImageWhenHighlighted = NO;
KETAN
la source
23
button.adjustsImageWhenDisabled = NO;

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

Tim
la source
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

Dimitris
la source
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.

}
therealbuckley
la source
3

Pour Swifty Developer -

yourButton.adjustsImageWhenHighlighted = false
iDeveloper
la source
3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
yuanjilee
la source
2

juste deux choses:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
Alok
la source
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

Jeff
la source
2

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

Khushboo
la source
-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

János
la source