web-dev-qa-db-ja.com

UIActionSheetボタンのテキストの色を変更する

私のプロジェクトでは、UIActionSheetを使用して、いくつかの並べ替えタイプを表示しています。アクションシートのボタンに表示されるテキストの色を変更したい。テキストの色をどのように変更できますか?

33
kiri

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];
        }
    }
}
73
jrc

IOS 8では、これはもう機能しません。 UIActionSheetテキストは、window.tintColorから色を取得しているようです。

19
lifjoy

これはiOS8で私のために働く

[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor redColor]];
17
blacksheep_2011

UIActionSheetのサブビューを使用したい場合は、UILabelのテキストの色を直接設定するのではなく、代わりにUIButtonsetTitleColor: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];
        }
    }
}
12
Jonathan

遅い答えかもしれませんが、私はそれが誰かを助けることができると思います。

iOS 8:UIAlertActionをスタイルで初期化することができます:UIAlertActionStyleDestructiveそのようです:

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

   // your code in here   

}];

これにより、デフォルトでボタンのテキストが赤になります。

enter image description here

5
Julius

Swiftのソリューション。すべての色を変更します。

UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .yellow
2
kubacizek

@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];
        }
      }
}
2
seufagner

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.
}
1
Ravish

[〜#〜] edit [〜#〜]

同様の質問があります: IActionSheetのボタンをカスタマイズする方法?

appearanceプロトコルを使用してみてください[NOT WORKING]

 UIButton *btn = [UIButton appearanceWhenContainedIn:[UIActionSheet class], nil];
 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
1
alexcristea

UIAppearanceはこれを処理できます。

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

サブビューを使用するよりもはるかに簡単ですが、iOS 6以前ではこのソリューションをテストしていません。

0
cantoni