web-dev-qa-db-fra.com

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

J'ai un bouton UIB 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é, ce qui me met en colère.

Suggestions?

138
kbanman

Votre bouton doit avoir son buttonType défini sur Personnalisé.

Dans IB, vous pouvez décocher "Surligner les réglages d'image".

Par programme, vous pouvez utiliser theButton.adjustsImageWhenHighlighted = NO;

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

290
Haydn

En plus de la réponse ci-dessus consistant à décocher "mettre en surbrillance règle l'image" dans IB, assurez-vous que le type de bouton est défini sur CUSTOM.

37
Mosib Asad

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];

3ème ligne est le truc ici ...

Cela fonctionne de la même manière pour définir image/backgroundImage

34
Manish Ahuja
adjustsImageWhenHighlighted = NO;
26
KETAN
button.adjustsImageWhenDisabled = NO;

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

23
Tim

Selon ce qui change de l'état par défaut à l'état en surbrillance du bouton, vous pouvez appeler plusieurs 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 le 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

4
Dimitris

OK, voici une solution facile si cela fonctionne pour vous. Après une semaine à me cogner la tête, je me suis finalement mis à mettre en surbrillance = NON pour la 1re 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
therealbuckley

Pour Swifty Developer -

yourButton.adjustsImageWhenHighlighted = false
3
iDeveloper

Swift 3 +

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
3
yuanjilee

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

enter image description here

2
Jeff

juste deux choses:

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

faites votre type de bouton - "Personnalisé" et décochez - Surligné Ajustez l'image et vous avez terminé.

2
Khushboo