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,就可以抛弃这些代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值