Dans mon projet, j'utilise UIActionSheet
pour afficher certains types de tri. Je souhaite modifier la couleur du texte affiché dans les boutons de la feuille d'action. Comment pouvons-nous changer la couleur du texte?
iOS 8:UIActionSheet
est déconseillé. UIAlertController
respecte -[UIView tintColor]
, donc ça marche:
alertController.view.tintColor = [UIColor redColor];
Mieux encore, définissez la couleur de teinte de la fenêtre entière dans votre délégué d'application:
self.window.tintColor = [UIColor redColor];
iOS 7: Dans votre délégué de feuille d'action, implémentez -willPresentActionSheet:
comme suit:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
}
}
}
Dans iOS 8, rien de tout cela ne fonctionne plus. Le texte de UIActionSheet semble tirer sa couleur de window.tintColor.
Cela fonctionne pour moi dans iOS8
[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor redColor]];
Si jamais vous souhaitez parcourir les sous-vues de UIActionSheet
, vous ne devez pas définir directement la couleur du texte de UILabel
mais utiliser le UIButton
setTitleColor:forState
méthode à la place. Sinon, la couleur initiale sera rétablie lors d'événements comme UIControlEventTouchDragOutside par exemple.
Voici la bonne façon de le faire, en réutilisant le code du jrc:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
}
}
}
Peut-être une réponse tardive, mais je pense que cela pourrait aider quelqu'un.
iOS 8: Vous pouvez simplement initialiser votre UIAlertAction avec le style: UIAlertActionStyleDestructive ainsi:
UIAlertAction *delete = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action){
// your code in here
}];
Cela rendra le texte du bouton rouge par défaut.
Solution pour Swift. Change toutes les couleurs.
UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .yellow
La solution @jrc fonctionne, mais la couleur de titleLabel change lorsque vous appuyez sur le bouton. Essayez ceci pour conserver la même couleur dans tous les états.
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
UIColor *customTitleColor = [UIColor greenColor];
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setTitleColor:customTitleColor forState:UIControlStateHighlighted];
[button setTitleColor:customTitleColor forState:UIControlStateNormal];
[button setTitleColor:customTitleColor forState:UIControlStateSelected];
}
}
}
utiliser ceci pour ios 8 et supérieur
SEL selector = NSSelectorFromString(@"_alertController");
if ([actionSheet respondsToSelector:selector])
{
UIAlertController *alertController = [actionSheet valueForKey:@"_alertController"];
if ([alertController isKindOfClass:[UIAlertController class]])
{
alertController.view.tintColor = [UIColor blueColor];
}
}
else
{
// use other methods for iOS 7 or older.
}
[~ # ~] modifier [~ # ~]
Voici une question similaire: Comment personnaliser les boutons dans UIActionSheet?
Essayez d'utiliser le protocole appearance
[ NE FONCTIONNE PAS ]
UIButton *btn = [UIButton appearanceWhenContainedIn:[UIActionSheet class], nil];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
UIAppearance peut gérer cela:
[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal];
Beaucoup plus facile que de passer par les sous-vues, mais je n'ai pas testé cette solution sur iOS 6 ou une version antérieure.