kbj*_*sen 17 customization uialertview ios8 uialertcontroller
我习惯UIAlertViews
通过[ alert setValue:someView forKey:@"accessoryView"]
方法来定制.这为UIAlertViews创建了具有自定义高度的可自定义内容.但它只适用于iOS7及以下版本.在iOS8中UIAlertController
已经接管了,我不能再自定义它了,它会削减它的高度UIAlertView
.
是不是因为误用了UIAlertController
,或者我该怎么做呢?我试图在UIAlertController中包含一个UITableView UIAlertControllerStyleAlert
.
谢谢.
Jon*_*asG 36
我现在遇到了同样的问题.我查看了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"];
Run Code Online (Sandbox Code Playgroud)
这段代码将在警报视图中显示红色视图!快乐的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);
}
Run Code Online (Sandbox Code Playgroud)
在生产中使用此方法可能存在风险,我不建议将其用于重要警报.
Ada*_*lan 11
我建议不要浪费时间尝试将额外的UI塞进一个不应该的地方.基于最近几年的改进,Apple可能会在下一个iOS中添加自定义视图.在此之前,请看一个旨在处理这种确切情况的框架,而不会破坏任何最佳实践:SDCAlertView
它支持模仿iOS 7,8,9上的本机警报的警报,包括处理所有关于大小调整,按钮类型,旋转等的令人讨厌的边缘情况.它确实支持警报中的任意自定义视图.
我在Yahoo YMPromptKit中使用这个库来获得与iOS原生完全相同的自定义推送通知提示.这是另一个例子:
归档时间: |
|
查看次数: |
36064 次 |
最近记录: |