美文网首页iOS DeveloperiOS && Android
ActionSheet和iPad(iOS8,9)

ActionSheet和iPad(iOS8,9)

作者: 云抱住阳光太阳没放弃发亮 | 来源:发表于2016-02-29 17:32 被阅读1338次

在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自动将操作表中的取消按钮删除。这是因为在支持弹出框的设备上,取消弹出框的便利方法是触摸弹出框外面,换句话说,不需要取消按钮。

相关文章

网友评论

    本文标题:ActionSheet和iPad(iOS8,9)

    本文链接:https://www.haomeiwen.com/subject/alugkttx.html