38

在我的项目中,我UIActionSheet用于显示某些排序类型。我想更改操作表按钮中显示的文本的颜色。我们如何更改文本颜色?

4

11 回答 11

78

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];
        }
    }
}
于 2013-10-03T20:24:42.173 回答
20

在 iOS 8 中,这些都不再适用了。UIActionSheet 文本似乎从 window.tintColor 获取颜色。

于 2014-08-21T22:28:22.517 回答
17

这在 iOS8 中对我有用

[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor redColor]];
于 2014-12-12T06:52:00.563 回答
12

如果您想浏览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];
        }
    }
}
于 2013-10-31T13:11:30.320 回答
8

可能是一个迟到的答案,但我认为它可以帮助某人。

iOS 8: 您可以简单地使用样式初始化您的 UIAlertAction:UIAlertActionStyleDestructive,如下所示:

UIAlertAction *delete = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action){

   // your code in here   

}];

这将使按钮的文本默认为红色。

在此处输入图像描述

于 2017-02-02T17:10:24.460 回答
6

要在警报操作中更改特定按钮的颜色,请使用此

let cancelAction = UIAlertAction(title: "Success", style: .cancel, handler: nil)
cancelAction.setValue(UIColor.green, forKey: "titleTextColor")

于 2019-10-10T06:30:34.793 回答
2

@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];
        }
      }
}
于 2013-11-01T18:21:30.957 回答
2

Swift 3的解决方案。更改所有颜色。

UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .yellow
于 2017-09-27T14:16:31.467 回答
1

编辑

这是一个类似的问题:如何在 UIActionSheet 中自定义按钮?

尝试使用appearance协议 [不工作]

 UIButton *btn = [UIButton appearanceWhenContainedIn:[UIActionSheet class], nil];
 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
于 2013-04-23T07:49:39.873 回答
1

将此用于 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.
}
于 2015-09-22T04:28:58.760 回答
0

UIAppearance 可以处理这个:

[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal];

比浏览子视图要容易得多,但我还没有在 iOS 6 或更早版本上测试过这个解决方案。

于 2014-06-22T12:08:35.367 回答