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.
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.
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.
Swift 3:
myButton.adjustsImageWhenHighlighted = false
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
}
}
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.