web-dev-qa-db-fra.com

Comment désactiver UIButton Highlight au clic?

Comment désactiver les effets de surbrillance des boutons au clic? Avoir un bouton personnalisé avec la couleur blanche bg et la couleur du texte DarkGray. Le problème est que le texte devient blanc en cliquant sur un bouton. Déjà essayé mais aucun d'entre eux n'a fonctionné:

une. A décoché "Ajuster l'image en surbrillance" dans le générateur d'interface.

b. Méthode d'essai mise en surbrillance = NON dans la méthode du bouton enfoncé:

((UIButton *)sender).highlighted = NO

c. J'ai essayé de définir le même titre pour l'état élevé: 

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

Aucune suggestion?

19
Centurion

UIButton sera mis en surbrillance au clic, cochez le réglage du bouton Modifiez la couleur du titre en surbrillance. Config doit être identique à celle par défaut Ou vous pouvez définir:

[button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];

Si vous voulez contrôler Surligné par code, vous pouvez désactiver le bouton surligné par la sous-classe normal et le désactiver dans touchesBegin:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    if (self.state == UIControlStateHighlighted) {
        [self setHighlighted:NO];
    }
}
13
LE SANG

Vous pouvez également créer le type UIButton: personnalisé à partir de StoryBoard

Custom button

Cela devrait supprimer tout comportement du système pour vous. (Je pense) 

40
Paul Brewczynski

Ceci est une solution pour les boutons qui ont des images. Dans le storyboard, il existe une propriété appelée HighlightedAdjustsImage qui est activée par défaut. Désactivez cela et votre image de bouton ne montrera aucune propriété en surbrillance.

16
Rajeev Bhatia

Swift 4 avec XCode 9

Décochez simplement "Surligner Ajuster l'image" et si vous souhaitez supprimer l'arrière-plan désactivé, décochez "Désactiver Ajuster l'image".

Assurez-vous d'abord que votre type de bouton est "Personnalisé"

 enter image description here

10
ibrahimyilmaz

vieilles réponses obsolètes et vieille question, mais la façon la plus récente et la plus simple est

    overlayButton.adjustsImageWhenHighlighted = false
7
Jeremie

Aucune des solutions que j'ai trouvées en ligne ne fonctionnait pour moi (y compris celles répertoriées ici), alors j'ai fini par le faire dans ma custom UIButton subclass :

// Swift:

override var isHighlighted: Bool {
    didSet { if isHighlighted { isHighlighted = false } }
}

La variable buttonType est également définie sur .custom, mais cela ne fait probablement aucune différence ici.

Et maintenant: plus de surbrillance bizarre ou d'animations de couleurs!

4
ephemer

Vous pouvez le faire en créant une extension dans Swift 4.2

extension UIButton {
open override var isHighlighted: Bool {
    didSet {
        super.isHighlighted = false
    }
}}
1
iOS Lifee

Mes 2 centimes;) Swift 3 prêt

class CustomButton: UIButton {

    override var isHighlighted: Bool {
        didSet {
            if (isHighlighted) {
                super.isHighlighted = false
            }
        }
    }

}

Situation et histoire

J'avais défini les images pour UIControlState.normal et UIControlState.selected, donc régler UIButton.isSelected = true affiche l'image sélectionnée, sinon l'image normale.

Nous avons découvert le problème lorsque UIButton.isSelected = true et pendant la surbrillance/la mise au point (maintenez le bouton enfoncé tout en le supprimant en effleurant). Le bouton affiche une image pour UIControlState.normal, qui était plutôt moche pour mon patron: D

J'ai essayé plusieurs solutions, telles que UIButton(type: UIButtonType.custom) et UIButton.adjustsImageWhenHighlighted = false, aucune n'a aidé :(

1
AamirR