iOS8ではUIAlertControllerのテキストカラーを変更するときには以下のコードで対応することができました。
ios8
[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor greenColor]];
iOS9では上記のコードでは色は反映されません。
iOS9でテキストカラーを変更するには以下のことを行います。
- UIAlertControllerを継承したクラスを作成する
- 継承したクラスのviewWillLayoutSubviewsでtintColorを設定する
ios9(表示するとき)
//UIAlertControllerを継承したクラスを使います
MyUIAlertController* ac = [MyUIAlertController alertControllerWithTitle:@"title"
message:@"message"
preferredStyle:UIAlertControllerStyleActionSheet];
[ac addAction:[UIAlertAction actionWithTitle:@"item1"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
}]];
[ac addAction:[UIAlertAction actionWithTitle:@"cancel"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction * action) {
}]];
ac.view.tintColor = [UIColor greenColor];//tintColorを設定する
[self presentViewController:ac animated:YES completion:^{
}];
これだと初期表示時には色が変わりますが、アイテムをハイライトしたときにデフォルトの色に戻ってしまいます。
なので、継承したクラス(ここではMyUIAlertController)側で制御する必要があります。
ios9(継承クラス側)
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
self.view.tintColor = [UIColor greenColor];
}
これで、ハイライトしたときにも設定したtintColorが反映されます。
上記のコードでiOS8でも動作することを確認しています。
もっとスマートなやり方があれば教えて下さい。