私のプロジェクトでは、UIActionSheet
を使用して、いくつかの並べ替えタイプを表示しています。アクションシートのボタンに表示されるテキストの色を変更したい。テキストの色をどのように変更できますか?
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];
}
}
}
IOS 8では、これはもう機能しません。 UIActionSheetテキストは、window.tintColorから色を取得しているようです。
これはiOS8で私のために働く
[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor redColor]];
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];
}
}
}
Swiftのソリューション。すべての色を変更します。
UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .yellow
@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];
}
}
}
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.
}
[〜#〜] edit [〜#〜]
同様の質問があります: IActionSheetのボタンをカスタマイズする方法?
appearance
プロトコルを使用してみてください[NOT WORKING]
UIButton *btn = [UIButton appearanceWhenContainedIn:[UIActionSheet class], nil];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
UIAppearanceはこれを処理できます。
[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal];
サブビューを使用するよりもはるかに簡単ですが、iOS 6以前ではこのソリューションをテストしていません。