我现在遇到了同样的问题。我查看了 UIAlertController 的私有标头(https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UIAlertController.h),发现了一个有前途的属性:contentViewController
accessoryView
事实证明它与以前用于 UIAlertView 的完全相同,不同之处在于您需要将 UIViewController 分配给此属性而不是 UIView。
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);
}
在生产中使用这种方法可能会有风险,我不建议将它用于重要警报。