ActionSheet和iPad(iOS8,9)

在iPad中使用UIAlertController,
样式设置成UIAlertControllerStyle.ActionSheet(以下简称操作表),运行后会出现如下错误:


在iPad中,不应该直接在视图上显示操作表。Apple UI 指南指出,必须在弹出框中显示操作表。弹出框(popover)是一种独特的UI元素,在用户触摸某个屏幕元素时出现,并通常在用户触摸背景时消失。弹出框还包含一个小箭头,指向出发它的UI元素。

在iPad中常见操作表时,iOS将自动配置一个弹出框控制器,并将其储存在提醒控制器的变量属性popoverPresentationController中。然而,要让弹出框控制器能够正常工作,需要设置其两个变量属性:sourceView(触发弹出框的视图)和sourceRect(弹出框应指向的矩形区域)。这两个属性指的不是一样东西吗?是一样东西。Apple文档甚至指出只要设置其中的一个。但实际上,除非设置着两个属性,否则弹出框将不能正常工作。

在presentViewController之前,加入代码:

if alert.popoverPresentationController != nil {
    alert.popoverPresentationController!.sourceView = sender as? UIView
    alert.popoverPresentationController!.sourceRect = sender.bounds
}

在非iPad设备上,popoverPresentationController被设置为nil,因此不会执行这些配置代码行。在iPad上运行,操作表将包含在一个弹出框中;而在iPhone上运行时,将像我们预期的那样显示操作表。

在弹出框中显示操作表时,iOS自动将操作表中的取消按钮删除。这是因为在支持弹出框的设备上,取消弹出框的便利方法是触摸弹出框外面,换句话说,不需要取消按钮。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 孙红雷、车晓演的好先生虽说缺点一大堆。但是吸引我的两个亮点恰恰是别的城市剧所未曾关注过的。 一、关注了城市白领中普...
    沙鱼阅读 232评论 0 0
  • 从枝头飘落 随风 一路流浪 归于尘土 一只鸟儿 从羽翼未丰 随本能 一路风雨 振翅飞翔天际 一个人 从出生 随岁月...
    一览芳华美阅读 124评论 4 4
  • 月下蓑衣客阅读 194评论 0 0