私は今同じ問題に遭遇しました。UIAlertController のプライベート ヘッダー ( https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UIAlertController.h ) を調べたところ、有望なプロパティが見つかりました。contentViewController
そして、UIAlertView の場合とまったく同じであることが判明しましaccessoryView
た。違いは、UIView ではなく、このプロパティに UIViewController を割り当てる必要があることです。
UIViewController *v = [[UIViewController alloc] init];
v.view.backgroundColor = [UIColor redColor];
[alertController setValue:v forKey:@"contentViewController"];
このコードはアラート ビューに赤いビューを表示します。幸せな UIAlertController のカスタマイズ ;)
PS。これは私有財産ですが、KVC を使用すれば App Store に関しては問題ないと思います。
編集:
これはあまり安全ではないと不満を言う人もいます。これはパブリック API ではないため、Apple はどのリリースでもこれを変更して、このメソッドが失敗する可能性があります。
クラッシュが発生した場合にアプリ全体がクラッシュしないようにするために、KVC 呼び出しをtry
ブロックでラップできます。プロパティが変更された場合、コントローラーはコンテンツ ビューを表示しませんが、クラッシュすることもありません。
@try {
[alertController setValue:v forKey:@"contentViewController"];
}
@catch(NSException *exception) {
NSLog(@"Failed setting content view controller: %@", exception);
}
この方法を本番環境で使用するのは危険な場合があるため、重要なアラートにはお勧めしません。