В моем проекте я использую UIActionSheet
для отображения для некоторого типа сортировки. Я хочу изменить цвет текста, отображаемого в кнопках панели действий. Как изменить цвет текста?
Изменение цвета текста в кнопках UIActionSheet
Ответ 1
iOS 8: UIActionSheet
устарел. UIAlertController
соответствует -[UIView tintColor]
, поэтому это работает:
alertController.view.tintColor = [UIColor redColor];
Еще лучше, установите цвет оттенка всего окна в делетете приложения:
self.window.tintColor = [UIColor redColor];
iOS 7: В своем делете делегата действия выполните -willPresentActionSheet:
следующим образом:
- (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];
}
}
}
Ответ 2
В iOS 8 все это не работает. Текст UIActionSheet, кажется, получает свой цвет из window.tintColor.
Ответ 3
Это работает для меня в iOS8
[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor redColor]];
Ответ 4
Если вы захотите пройти через subviews UIActionSheet
, вы не должны напрямую устанавливать цвет текста UILabel
, а вместо этого используйте метод UIButton
setTitleColor:forState
. В противном случае начальный цвет будет установлен на такие события, как UIControlEventTouchDragOutside, например.
Вот правильный способ сделать это, повторно используя код 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];
}
}
}
Ответ 5
Может быть, поздний ответ, но я думаю, что он может кому-то помочь.
iOS 8: Вы можете просто инициализировать UIAlertAction со стилем: UIAlertActionStyleDestructive, например так:
UIAlertAction *delete = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action){
// your code in here
}];
По умолчанию текст кнопки будет красным.
Ответ 6
Решение@jrc работает, но цвет titleLabel изменяется при нажатии кнопки. Попробуйте, чтобы он сохранял один и тот же цвет во всех состояниях.
- (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];
}
}
}
Ответ 7
Soulution для Swift 3. Изменяет все цвета.
UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .yellow
Ответ 8
ИЗМЕНИТЬ
Вот аналогичный вопрос: Как настроить кнопки в таблице UIActionSheet?
Попробуйте использовать протокол appearance
[ НЕ РАБОТАЕТ]
UIButton *btn = [UIButton appearanceWhenContainedIn:[UIActionSheet class], nil];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
Ответ 9
используйте это для ios 8 и выше
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.
}
Ответ 10
UIAppearance может справиться с этим:
[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal];
Намного легче, чем пройти через subviews, но я не тестировал это решение на iOS 6 или ранее.
Ответ 11
Чтобы изменить определенный цвет кнопок в действии оповещения, используйте эту
let cancelAction = UIAlertAction(title: "Success", style: .cancel, handler: nil)
cancelAction.setValue(UIColor.green, forKey: "titleTextColor")