Подтвердить что ты не робот

Изменение цвета текста в кнопках UIActionSheet

В моем проекте я использую UIActionSheet для отображения для некоторого типа сортировки. Я хочу изменить цвет текста, отображаемого в кнопках панели действий. Как изменить цвет текста?

4b9b3361

Ответ 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   

}];

По умолчанию текст кнопки будет красным.

enter image description 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")