web-dev-qa-db-fra.com

définir la couleur du titre pour UIButton lorsqu'il est mis en surbrillance iOS 7

J'ai le code suivant dans un viewController, toutes les sorties et actions sont correctement connectées. WHITE et PURPLE sont des UIColors pour lesquelles j'ai défini des constantes. J'ai également défini le UIWindow du tintColor sur PURPLE et cela se propage jusqu'au bouton.

- (void)viewDidLoad {
    [super viewDidLoad];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
    button.backgroundColor = WHITE;
    button.layer.borderWidth = 1.0;
    button.layer.masksToBounds = YES;
    button.layer.cornerRadius = 5.0;
    button.layer.borderColor = PURPLE.CGColor;
}

-(IBAction) buttonTouchDown:(id)sender {
    button.backgroundColor = PURPLE;
    button.layer.borderColor = WHITE.CGColor;
}

-(IBAction) buttonTouchUpOutside:(id)sender {
    button.backgroundColor = WHITE;
    button.layer.borderColor = PURPLE.CGColor;
}

-(IBAction) buttonTouchUpInside:(id)sender {
    button.backgroundColor = WHITE;
    button.layer.borderColor = PURPLE.CGColor;
}

Lorsque je clique sur le bouton, le texte ne devient pas blanc comme je l'ai dit dans viewDidLoad

voici quelques captures d'écran que j'aurais pu mieux recadrer! Comme vous pouvez le voir dans l'état en surbrillance, ce n'est pas blanc mais comme un mélange blanc et violet. Dois-je utiliser UIButtonTypeCustom? J'ai entendu que si je le fais, je n'obtiendrai pas les avantages d'iOS 7 faisant sa magie avec tintColor. Je ne sais pas quelle est la bonne façon de procéder. Merci d'avance.

normalStatehighlightedState

31
Adam Langsner

Ne devriez-vous pas utiliser UIControlStateSelected?

D'accord, je viens de l'essayer moi-même, il ne veut pas bien fonctionner.

Vous devez définir votre style de bouton sur Personnalisé. Le style du système UIButton fait beaucoup de choses que vous ne pouvez pas changer. L'état du bouton en surbrillance correspond par défaut à sa propre implémentation qui est une version plus claire si votre teinte.

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitleColor:self.view.tintColor forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];

Cela devrait vous donner le fond de texte blanc.

61
David Wong