Celui-ci m'a perplexe.
Est-il possible du tout de changer la couleur de fond d'un UIButton dans Cocoa pour iPhone. J'ai essayé de définir la couleur d'arrière-plan mais cela ne change que les coins. setBackgroundColor:
semble être la seule méthode disponible pour de telles choses.
[random setBackgroundColor:[UIColor blueColor]];
[random.titleLabel setBackgroundColor:[UIColor blueColor]];
objective-c
iphone
cocoa-touch
uibutton
dubbeat
la source
la source
Réponses:
Cela peut être fait par programme en créant une réplique:
modifier: bien sûr, il faudrait
#import <QuartzCore/QuartzCore.h>
edit: à tous les nouveaux lecteurs, vous devriez également considérer quelques options ajoutées comme "une autre possibilité". pour votre considération.
Comme il s'agit d'une ancienne réponse, je recommande fortement de lire les commentaires pour le dépannage
la source
J'ai une approche différente,
De CommonUIUtility,
N'oubliez pas de
#import <QuartzCore/QuartzCore.h>
la source
btFind.layer.borderWidth = 1;
setBackgroundColor:(UIColor *) forState:(UIControlState)
.Je suppose que vous parlez d'un UIButton avec
UIButtonTypeRoundedRect
? Vous ne pouvez pas changer la couleur d'arrière-plan de cela. Lorsque vous essayez de changer sa couleur d'arrière-plan, vous changez plutôt la couleur du rectangle sur lequel le bouton est dessiné (ce qui est généralement clair). Il y a donc deux façons de procéder. Soit vous sous-classez UIButton et écrasez sa-drawRect:
méthode, soit vous créez des images pour les différents états de bouton (ce qui est parfaitement bien à faire).Si vous définissez les images d'arrière-plan dans Interface Builder, vous devriez remarquer que IB ne prend pas en charge la configuration des images pour tous les états que le bouton peut avoir, je vous recommande donc de définir les images dans un code comme celui-ci:
La dernière ligne montre comment définir une image pour l'état sélectionné et mis en surbrillance (c'est celui que IB ne peut pas définir). Vous n'avez pas besoin des images sélectionnées (lignes 4 et 6) si vous n'avez pas besoin d'un état sélectionné.
la source
CGContextSetFillColorWithColor
etCGContextFillPath
pour remplir le chemin tracé parCGContextAddArcToPoint
.forState:(UIControlStateHighlighted | UIControlStateSelected)
Cheers.Une autre possibilité:
Cependant, le bouton est carré et ce n'est pas ce que nous voulons. Créez un IBOutlet avec une référence à ce bouton et ajoutez ce qui suit à la méthode viewDidLoad:
N'oubliez pas d'importer QuartzCore.h
la source
Sous-classe UIButton et override Méthodes setHighlighted et setSelected
Ma méthode darkerShade est dans une catégorie UIColor comme celle-ci
la source
Si vous ne souhaitez pas utiliser d'images et que vous souhaitez qu'elles ressemblent exactement au style Rounded Rect, essayez ceci. Placez simplement un UIView sur l'UIButton, avec un cadre et un masque de redimensionnement automatique identiques, définissez l'alpha sur 0,3 et définissez l'arrière-plan sur une couleur. Utilisez ensuite l'extrait ci-dessous pour découper les bords arrondis de la vue de superposition colorée. Décochez également la case `` User Interaction Enabled '' dans IB sur l'UIView pour permettre aux événements tactiles de se dérouler en cascade vers l'UIButton en dessous.
Un effet secondaire est que votre texte sera également colorisé.
la source
Une autre possibilité (la meilleure et la plus belle à mon humble avis):
Créez un UISegmentedControl avec 2 segments dans la couleur d'arrière-plan requise dans Interface Builder. Définissez le type sur «bar». Ensuite, changez-le pour n'avoir qu'un seul segment. Le générateur d'interface n'accepte pas un segment, vous devez donc le faire par programme.
Par conséquent, créez un IBOutlet pour ce bouton et ajoutez-le au viewDidLoad de votre vue:
Vous avez maintenant un beau bouton brillant et coloré avec la couleur d'arrière-plan spécifiée. Pour les actions, utilisez l'événement «valeur modifiée».
(J'ai trouvé ceci sur http://chris-software.com/index.php/2009/05/13/creating-a-nice-glass-buttons/ ). Merci Chris!
la source
Eh bien, je suis à 99% sûr que vous ne pouvez pas simplement changer la couleur d'arrière-plan d'un UIButton. Au lieu de cela, vous devez changer vous-même les images d'arrière-plan, ce qui, à mon avis, est pénible. Je suis étonné de devoir faire ça.
Si je me trompe ou s'il existe un meilleur moyen sans avoir à définir des images d'arrière-plan, veuillez me le faire savoir
la source
Par suggestion @EthanB et @karim faisant un rectangle rempli à l'arrière, je viens de créer une catégorie pour l'UIButton pour y parvenir.
Il suffit de déposer le code de catégorie: https://github.com/zmonteca/UIButton-PLColor
Usage:
Facultatif pour les États à utiliser:
la source
Vous pouvez également ajouter un CALayer au bouton - vous pouvez faire beaucoup de choses avec ceux-ci, y compris une superposition de couleur, cet exemple utilise un calque de couleur unie, vous pouvez également facilement graduer la couleur. Soyez conscient que les couches ajoutées obscurcissent celles en dessous
la source
ajoutez une deuxième cible pour le
UIButton
pourUIControlEventTouched
et changez laUIButton
couleur d'arrière - plan. Puis changez-le dans laUIControlEventTouchUpInside
cible;la source
Pour des boutons professionnels et agréables, vous pouvez vérifier ce composant de bouton personnalisé . Vous pouvez l'utiliser directement dans vos vues et tables vues ou modifier le code source pour qu'il réponde à vos besoins. J'espère que cela t'aides.
la source
Ce n'est pas aussi élégant que le sous-classement d'UIButton, mais si vous voulez juste quelque chose de rapide - ce que j'ai fait a été de créer un bouton personnalisé, puis une image 1px par 1px avec la couleur que je voudrais que le bouton soit, et définir l'arrière-plan du bouton à cette image pour l'état en surbrillance - fonctionne pour mes besoins.
la source
Je sais que cela a été demandé il y a longtemps et qu'il y a maintenant un nouveau UIButtonTypeSystem. Mais les nouvelles questions sont marquées comme des doublons de cette question, alors voici ma nouvelle réponse dans le contexte d'un bouton système iOS 7, utilisez la
.tintColor
propriété.la source
[myButton setBackgroundColor:[UIColor blueColor]]; [myButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
Il est possible de changer de cette façon ou d'aller sur Storyboard et de changer l'arrière-plan sur les options du côté droit.
la source
Swift 3:
la source