À un certain moment dans mon application, j'ai mis en surbrillance UIButton
(par exemple, lorsqu'un utilisateur a le doigt sur le bouton) et je dois changer la couleur d'arrière-plan pendant que le bouton est en surbrillance (donc pendant que le doigt de l'utilisateur est toujours sur le bouton) .
J'ai essayé ce qui suit:
_button.backgroundColor = [UIColor redColor];
Mais ça ne fonctionne pas. La couleur reste la même. J'ai essayé le même morceau de code lorsque le bouton n'est pas mis en surbrillance et cela fonctionne bien. J'ai également essayé d'appeler -setNeedsDisplay
après avoir changé la couleur, cela n'a eu aucun effet.
Comment forcer le bouton à changer la couleur de fond?
ios
objective-c
xcode
uibutton
MartinMoizard
la source
la source
Réponses:
Vous pouvez remplacer
UIButton
lasetHighlighted
méthode de.Objectif c
Swift 3.0 et Swift 4.1
la source
backgroundColor = isHighlighted ? .lightGray : .white
Je ne sais pas si ce type de solution résout ce que vous recherchez ou correspond à votre paysage de développement général, mais la première chose que j'essaierais serait de changer la couleur d'arrière-plan du bouton de l'événement touchDown.
Option 1:
Vous auriez besoin de deux événements pour être capturé, UIControlEventTouchDown le serait lorsque l'utilisateur appuie sur le bouton. UIControlEventTouchUpInside et UIControlEventTouchUpOutside seront pour quand ils relâcheront le bouton pour le ramener à l'état normal
Option 2:
Renvoyez une image réalisée à partir de la couleur de surbrillance souhaitée. Cela pourrait également être une catégorie.
puis modifiez l'état en surbrillance du bouton:
la source
layer.cornerRadius
et optez pour l'option # 2, vous devrez vous assurer de réglerclipsToBounds
sur true pour arrondir également les coins de l'image.Il n'est pas nécessaire de remplacer
highlighted
la propriété calculée. Vous pouvez utiliser l'observateur de propriétés pour déclencher un changement de couleur d'arrière-plan:Swift 4
la source
File>New>File>Cocoa Touch Class
dessus et en la définissant sursubclass of UIButton
. Nommez le fichier par exCustomButton
, qui deviendra à la fois le nom de fichier et le nom de classe. Dans ce fichier, mettez leoverride var highlighted
code ci-dessus. Dernière étape, définissez le UIButton sur Interface Builder pour utiliser cetteCustomButton
sous - classe en accédant à la page des propriétés où il est indiqué "Classe personnalisée" et comporte une zone de liste déroulante. Il indiquera "UIButton" en lettres grises. La liste déroulante doit afficher CustomButton. Sélectionnez-le et le bouton est maintenant sous-classé.isHighlighted = false
quelque part au début (lors de l'initialisation par exemple).Une extension générique pratique dans Swift:
Swift 3.0
la source
Dans Swift, vous pouvez remplacer l'accesseur de la propriété mise en surbrillance (ou sélectionnée) plutôt que de remplacer la méthode setHighlighted
la source
highlighted
c'était une propriété sur UIButton. La réponse est que c'est une propriété sur UIControl dont UIButton hérite.Remplacer la variable en surbrillance. L'ajout
@IBInspectable
vous permet de modifier la couleur de fond mise en surbrillance dans le storyboard, ce qui est également très pratique.la source
une solution plus compacte (basée sur la réponse @ aleksejs-mjaliks ):
Swift 3/4 + :
Swift 2:
Si vous ne voulez pas passer outre, il s'agit d'une version mise à jour de la réponse de @ timur-bernikowich ( Swift 4.2 ):
la source
Extension UIButton avec la syntaxe Swift 3+ :
Utilisez-le comme:
Réponse originale: https://stackoverflow.com/a/30604658/3659227
la source
Voici une approche dans Swift, en utilisant une extension UIButton pour ajouter un IBInspectable, appelé highlightBackgroundColor. Similaire à la sous-classe, sans nécessiter de sous-classe.
J'espère que ça aide.
la source
Vous pouvez utiliser cette catégorie qui ajoute la méthode setBackgroundColor: forState:
https://github.com/damienromito/UIButton-setBackgroundColor-forState-
la source
Ma meilleure solution pour Swift 3+ sans sous-classement.
Avec cette extension, il est facile de gérer les couleurs pour différents états et il décolore automatiquement votre couleur normale au cas où la couleur en surbrillance n'est pas fournie.
la source
METTRE À JOUR:
Utilisez la bibliothèque Swift UIButtonBackgroundColor .
VIEUX:
Utilisez les aides ci-dessous pour créer une image 1 px x 1 px avec une couleur de remplissage en niveaux de gris:
ou une couleur de remplissage RVB:
Ensuite, utilisez-le
image
pour définir l'image d'arrière-plan du bouton:Aides
Remarque:
ACU
est le préfixe de classe de ma bibliothèque statique Cocoa Touch appelée Acani Utilities, où AC est pour Acani et U pour Utilities.la source
Essaye ça !!!!
Pour TouchedDown Event, définissez une couleur et pour TouchUpInside, définissez l'autre.
la source
- (IBAction)onButtonTouchDragOutside:(UIButton *)sender {
pour m'assurer que la couleur ne reste pas activée lorsque l'utilisateur fait accidentellement glisser son doigt sur le bouton.Sous-classe le UIButton et ajoutez des propriétés inspectables pour une utilisation pratique (écrit dans Swift 3.0):
la source
Vous pouvez sous-classer le UIButton et faire un joli forState.
colourButton.h
colourButton.m
Remarques (Ceci est un exemple, je sais qu'il y a des problèmes et en voici quelques-uns)
J'ai utilisé un NSMutableDictionay pour stocker l'UIColor pour chaque État, je dois faire une conversion de texte désagréable pour la clé car l'UIControlState n'est pas un joli Int droit. Si c'est là que vous pouvez initier un tableau avec autant d'objets et utiliser l'état comme index.
Pour cette raison, vous avez souvent des difficultés avec par exemple un bouton sélectionné et désactivé, un peu plus de logique est nécessaire.
Un autre problème est que si vous essayez de définir plusieurs couleurs en même temps, je n'ai pas essayé avec un bouton, mais si vous pouvez le faire, cela peut ne pas fonctionner
J'ai supposé que c'était StoryBoard, il n'y a pas d'init, initWithFrame alors ajoutez-les si vous en avez besoin.
la source
Swift 5 , merci @Maverick
la source
Détails
Solution
Usage
la source
Essayez ceci si vous avez une image:
ou voyez si cela
showsTouchWhenHighlighted
vous suffit.la source
J'ai ouvert une sous-classe UIButton, STAButton , pour combler ce trou de fonctionnalité béant. Disponible sous licence MIT. Fonctionne pour iOS 7+ (je n'ai pas testé avec les anciennes versions d'iOS).
la source
Pour résoudre ce problème, j'ai créé une catégorie pour gérer les
backgroundColor
états avecUIButtons
:ButtonBackgroundColor-iOS
Vous pouvez installer la catégorie en tant que module .
Facile à utiliser avec Objective-C
Encore plus facile à utiliser avec Swift :
Je vous recommande d'importer le pod avec:
Utilisation de use_frameworks! dans votre Podfile facilite l'utilisation de vos pods avec Swift et objective-C.
IMPORTANT
J'ai également écrit un article de blog avec plus d'informations.
la source
la source
Utilisez https://github.com/swordray/UIButtonSetBackgroundColorForState
Ajouter au Podfile à l'aide de CocoaPods
Rapide
Objectif c
la source
Essayez
tintColor
:la source
NSLog(@"%@", _button);
?UIButtonTypeCustom
.Voici le code dans Swift pour sélectionner l'état du bouton:
Exemple:
la source
Déposez-le et vous êtes
prêt à partir: * la propriété peut être définie dans IB, et si aucun arrière-plan en surbrillance n'est défini, l'arrière-plan ne changera pas lorsque vous appuyez dessus
la source
L'
UIIImage
extension ci-dessous génère un objet image avec le paramètre de couleur spécifié.Un exemple d'utilisation d'un bouton peut être appliqué pour l'objet bouton comme:
la source
est simple, utilisez cette extension UIButton UNIQUEMENT
et utilisez ceci
la source
si vous ne remplacez pas, définissez simplement deux actions touchDown touchUpInside
la source
Swift 3:
la source
dans Swift 5
Pour ceux qui ne veulent pas utiliser l'arrière-plan coloré pour battre l'état sélectionné
Simplement, vous pouvez vaincre le problème en utilisant l'instruction #Selector & if pour changer facilement les couleurs UIButton pour chaque état individuellement
Par exemple:
la source