web-dev-qa-db-fra.com

Pourquoi mon UIButton.tintColor ne fonctionne-t-il pas?

Ma cible de construction est définie pour IOS5, c'est là que j'ai compris que UIButton.tintColor a été introduit ...

J'ai ceci dans mon viewDidLoad pour le View Controller

[timelineButton setTintColor:[UIColor blackColor]];
[timelineButton setTitle:@"test" forState:UIControlStateNormal];

Le texte change correctement mais le bouton n'est pas noir?

Merci!

39
sayguh

Selon la documentation :

Cette propriété n'est pas valide pour tous les types de boutons.

Vous devez passer votre buttonType à un autre l’un d’eux . (Malheureusement, la documentation ne spécifie pas quels types de bouton spécifiques prennent en charge cette propriété.)

50
Evan Mulawski

Assurez-vous que votre bouton "type" est défini sur Système. Si cette option est définie sur Personnalisé, cela peut être la raison pour laquelle la couleur de votre bouton ne change pas. C’est ce qui m’est arrivé et changer le type en Système l’a corrigé.

28
Jesse S.

Il teinte la couleur d'état en surbrillance . Lorsque vous tapez/cliquez sur le bouton UIB, la couleur spécifiée avec tintColor apparaît tant que vous maintenez le bouton/cliquez sur le bouton UIB.

resetButton.tintColor = [UIColor colorWithRed:0.764 green:1.000 blue:0.000 alpha:1.000];

Le bouton est blanc à l'état normal . Mais si je tape sur le bouton, la couleur devient rouge, mais seulement à ce moment-là.

SI vous devez changer le bouton afin qu'il ressemble à un bouton rouge ou bleu dans UIControlStateNormal, puis

Changez le UIButtonType en UIButtonTypeCustom dans Interface Builder ou par programme avec

 UIButton *resetButton = [UIButton buttonWithType:UIButtonTypeCustom];

Changez vous-même les attributs et recréez les coins arrondis

resetButton.backgroundColor = [UIColor redColor];
resetButton.layer.borderColor = [UIColor blackColor].CGColor;
resetButton.layer.borderWidth = 0.5f;
resetButton.layer.cornerRadius = 10.0f;
8
Binarian

Comme indiqué dans d'autres réponses, la teinte ne fonctionne pas pour les types de boutons personnalisés. Assurez-vous de déclarer explicitement le type de bouton. Ne vous contentez pas d'utiliser [UIButton alloc] init] 

Cela fonctionnera:

UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[mybutton setImage:[UIImage imageNamed:@"myImage"] forState:UIControlStateNormal];
mybutton.tintColor = [ODTheme blueTintColor];
7
Robert Wagstaff

Aujourd'hui, je rencontre également ce problème. J'utilise délégué pour le résoudre.

[button addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonPressReset:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];

-(void)buttonPress:(id)sender{
UIButton* button = (UIButton*)sender;
[button setBackgroundColor:[UIColor greenColor]];
NSLog(@"buttonPressed");
}

-(void)buttonPressReset:(id)sender{
UIButton* button = (UIButton*)sender;
[button setBackgroundColor:[UIColor redColor]];
NSLog(@"buttonPressReset");
}
4
alexqinbj

J'ai trouvé 3 choses doivent être suivies.

1. Rendre l'image en Default

Aller au Images.xcassets > Your Image > Show the Attributes inspector > Render As > Default

 render as default

2. Assurez-vous que votre type de bouton est Système

3. Modifiez maintenant la teinte du bouton.

Terminé.

3
Zaid Pathan

Devrait essayer cette méthode:

- (void)setTitleColor:(UIColor *)color
             forState:(UIControlState)state
3
Zverusha

Configurez simplement votre UIButton sur System dans Storyboard.

 enter image description here

Et puis dans le code, utilisez simplement:

myButton.tintColor = UIColor.whiteColor()

Si votre type UIButton est system, alors, seule la propriété de couleur de teinte fonctionnera. Donc, vous devez d’abord définir le type de bouton sur le système, puis appliquer une couleur de teinte pour cet état spécifique.

let btn = UIButton.init(type: .system)
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
1
Bhavesh Patel

Pour changer la couleur du texte du bouton, vous pouvez utiliser:

resetButton.setTitleColor(UIColor.blackColor(), forState: .Normal)

Ou OBJ-C:

- (void)setTitleColor:(UIColor *)color
         forState:(UIControlState)state

https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIButton_Class/#//Apple_ref/occ/instm/UIButton/setTitleColor:forState :

1
Arjon Bimmel

Utilisez simplement:

[yourButton setBackgroundImage:[yourButton.currentBackgroundImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal]; 
[yourButton setTintColor:[UIColor blackColor]];
0
Krishna Raj Salim