iOS UIAlertController 的坑

UIAlertController初始化时有两种preferredStyle:

第1种 UIAlertControllerStyleAlert

第2种 UIAlertControllerStyleActionSheet

建议使用第1种,因为:

1、第1种在iPhone和iPad上显示形式相同:都是屏幕居中的位置弹出对话框;而第2种在 iPhone是从屏幕底部弹出对话框,在iPad则是根据所指明的sourceView显示为一个“气泡”形式的对话框,而且如果按钮多,只能显示出前边1、2个按钮。

2、最重要的是,第2种如果使用不当在iPad上会崩溃。

UIPopoverPresentationController *popOver = [alert popoverPresentationController];
    // 如果不加这两句,iPad点击混合UITableView页的条目时会崩溃
    // 遗留问题:如果UIAlertAction较多,显示不全
    popOver.sourceView = vc.view; //下拉式对话框 弹出的位置
    popOver.sourceRect = vc.view.bounds;

    // 如果不加这两句,iPad点击纯UITableView页的条目不弹出对话框
    // 遗留问题:如果UIAlertAction较多,显示不全
    popOver.barButtonItem = vc.navigationItem.leftBarButtonItem;
    popOver.permittedArrowDirections = UIPopoverArrowDirectionAny;

在执行 [vc presentViewController:alert animated:YES completion:nil]; 之前,必须增加上述代码。另外和页面的布局还有关,例如上述代码注释:页面是非UITableView(未测试),纯UITableView, 混合UITableView(即UITableView只是页面的一部分布局,我的实例是在UITableView上方还有几个按钮)。

而只要UIAlertController的preferredStyle设置为UIAlertControllerStyleAlert,就可以抛弃这些代码。

猜你喜欢

转载自blog.csdn.net/piggy514/article/details/132488744