J'ai créé un bouton. La couleur du titre est noire par défaut. Mais lorsque j'appuie dessus, la couleur change pour devenir un peu bleue et ne change plus jamais, comment cela se produit-il? Quelqu'un peut-il me dire pourquoi? Et je veux que le titre du bouton reste noir tout le temps. Comment puis je faire ça? j'ai essayé
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateSelected];
Mais il n'y a aucun effet. Lorsque j'ajoute cela dans mon code, il semble que le titre du bouton soit toujours bleu.
Code comme suit.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(20, 360, 280, 44)];
[button setTitle:NSLocalizedString(@"Continue", @"Label: TextLabel in Continue button") forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20.0f];
button.titleLabel.textColor = [UIColor darkTextColor];
button.titleLabel.shadowColor = [UIColor blackColor];
button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth;
[self.view addSubview:button];
[button release];
Merci à tous. J'ai résolu le problème. Je pense que la cause profonde est
button.titleLabel.textColor = [UIColor darkTextColor];
Lorsque je supprime cela et que j'utilise
button setTitleColor:(UIColor) forState:(UIControlState);
Le problème est résolu!
vous pouvez utiliser
[UIButton setTitleColor: forState:]
pour tous les états, la couleur du titre restera la même pour tous les états.
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
Remarque: pour éviter de taper ou de coller le code ci-dessus trois fois, vous pouvez utiliser le code suivant suggéré par Will,
[button setTitleColor:[UIColor redColor] forState:(UIControlStateHighlighted | UIControlStateNormal | UIControlStateSelected)];
Comme le souligne @null, la manière la plus simple de le faire est de définir le type de bouton dans Interface Builder (ou dans le code) sur "Personnalisé".
Si vous devez répliquer ce comportement avec un bouton standard, remplacez la méthode setHighlighted
pour empêcher le canal alpha de titleLabel de s'ajuster également:
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
self.titleLabel.alpha = 1.0;
}
Utilisation d'Interface Builder et de .XIB
ou .storyboard
, sélectionnez votre UIButton
dans IB:
Affichage> Utilitaires> Inspecteur des attributs .
Sélectionnez State Config (Default) to one of Highlighted, Selected or Disabled) et modifiez l'attribut Couleur du texte .
Il y a quelques commentaires le soulignant, mais pour avoir cela comme une vraie réponse:
Définissez le type de bouton sur Custom
dans votre storyboard ou dans le code: [UIButton buttonWithType:UIButtonTypeCustom];
Pour quelque chose d'un peu plus réutilisable, vous pourriez envisager cela, car il ne viole pas le principe DRY. Ajoutez-le en tant que catégorie sur UIButton.
- (void)oka_setTitleColor:(UIColor *)color forStates:(NSArray *)states;
{
[states enumerateObjectsUsingBlock:^(NSNumber *state, NSUInteger idx, BOOL *stop) {
[self setTitleColor:color forState:[state integerValue]];
}];
}
exemple d'utilisation pour votre cas:
[self oka_setTitleColor:[UIColor darkTextColor]
forStates:@[@(UIControlStateNormal), @(UIControlStateHighlighted), @(UIControlStateSelected)]];
Je pense que Mayuur a raison. Avez-vous essayé une autre couleur au lieu de "darkTextColor"? Pour autant que je sache "darkTextColor" est une couleur spécifique au système qui est utilisée pour écrire du texte sur fond clair. Essayez peut-être blackColor si la suggestion de Mayuurs ne fonctionne pas.
Modifier: essayez d'ajouter: [sender setHighlighted:NO];
dans votre IBAction qui est appelée sur pression de bouton. Cela le résout-il? Je suggère cela parce que du [button release];
Je suppose que vous utilisez toujours une ancienne version du SDK iOs et là vous n'avez pas la possibilité de désactiver la surbrillance d'un bouton d'une manière élégante autre que celle-ci.
Edit2: Vous créez le bouton par programme, mais je ne vous vois pas le connecter avec une IBAction. Ajoutez ceci sous votre [[UIButton alloc] init];
[button addTarget:self action:@selector(myIBAction) forControlEvents:UIControlEventTouchUpInside];
Créez ensuite une méthode IBAction comme celle-ci:
- (IBAction)myIBAction:(UIButton *)sender; /* In Header File */
- (IBAction)myIBAction:(UIButton *)sender{ /* In Implementation File */
[sender setHighlighted:NO];
}