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?
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é".
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.
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
adjustsImageWhenHighlighted = NO;
button.adjustsImageWhenDisabled = NO;
est également utile pour avoir votre propre apparence de bouton désactivé.
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
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.
}
Pour Swifty Developer -
yourButton.adjustsImageWhenHighlighted = false
Swift 3 +
button.adjustsImageWhenHighlighted = false
button.adjustsImageWhenDisabled = false
juste deux choses:
UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
faites votre type de bouton - "Personnalisé" et décochez - Surligné Ajustez l'image et vous avez terminé.