web-dev-qa-db-fra.com

Changer la couleur du surlignage gris foncé lorsque vous maintenez le bouton UIButton personnalisé?

J'ai une coutume UIButton qui est un fichier .png en nuage, transparent en noir et blanc, sans état de panne, juste une image. Lorsque vous tapez et maintenez le doigt dessus, il devient gris foncé. J'essaie de changer ce gris foncé en quelque chose d'un peu moins oppressant. Le bouton est à l’air libre dans une vue et non dans une barre de tabulation, une barre d’outils ou un contrôleur de navigation.

J'ai déjà essayé de définir tintColor (ce que la documentation m'informe utilement ne convient que pour «certains» types de boutons, ce qui n'indique pas lequel).

J'ai également essayé de modifier tout ce que je peux trouver dans Interface Builder en ce qui concerne les couleurs de surbrillance, les états par défaut, etc. Rien n'a changé du tout.

J'ai même essayé de définir la propre image du bouton pour son état UIControlStateHighlighted, mais même cela fait apparaître le calque gris foncé lorsque je passe mon doigt dessus.

Comment puis-je changer cette couleur? J'ai examiné de nombreux autres problèmes ici sur SO et je suis incapable de trouver une solution qui fonctionne pour moi. Toute aide serait grandement appréciée!

EDIT: I J'ai résolu le problème en utilisant une catégorie de UIImage qui ajoute une méthode qui utilise CoreGraphics pour appliquer une teinte à une UIImage fournie. J'ai ensuite mis CETTE image en surbrillance et tout va bien. Semble beaucoup de cerceau-la pour changer une couleur Apple aurait dû nous laisser changer, mais c'est la vie.

30
Luke

Vous avez défini une image personnalisée pour l’état UIControlStateHighlighted. Ceci devrait désactiver le comportement par défaut.

Si vous rencontrez toujours des problèmes, vous pouvez désactiver cet effet en définissant la propriété adjustsImageWhenHighlighted sur NO et en utilisant l’effet personnalisé de votre choix.

64
Mike Weller

Si ajusteImageWhenHighlighted = NO ne fonctionne pas, définissez Button-Type sur Custom (Personnalisé ou par programme).

Type de bouton par défaut: Système, modifie le comportement du bouton en surbrillance.

32
Greg Leszek

Swift 3:

myButton.adjustsImageWhenHighlighted = false
6
Morten Gustafsson

Vous pouvez écrire un bouton personnalisé qui le fait

class ActionButton: UIButton {

  var originalBackgroundColor: UIColor!

  override var backgroundColor: UIColor? {
    didSet {
      if originalBackgroundColor == nil {
        originalBackgroundColor = backgroundColor
      }
    }
  }

  override var isHighlighted: Bool {
    didSet {
      guard let originalBackgroundColor = originalBackgroundColor else {
        return
      }

      backgroundColor = isHighlighted ? originalBackgroundColor.darken() : originalBackgroundColor
    }
  }
1
onmyway133

J'avais un problème similaire avec un bouton UIB personnalisé lorsque le bouton était surligné en gris à chaque pression. J'ai résolu ce problème en sous-classant UIButton et dans l'implémentation, j'ai redéfini une seule méthode, (void) setHighlighted: méthode et l'ai gardé vide:

- (void)setHighlighted:(BOOL)highlighted
{
   // Leave empty to prevent super from doing whatever
   // that it is doing to show the grey highlight.
}

Cela a arrêté tout type de mise en évidence car je ne faisais rien dans la méthode. C'est une meilleure approche si tout ce que vous essayez de faire est de supprimer tout effet de surbrillance.

Ainsi, dans votre code, créez une sous-classe de UIButton, substituez la méthode setHighlighted, puis faites de votre bouton personnalisé une sous-classe de cette classe personnalisée.

1
Raz