当前位置: 首页 > 知识库问答 >
问题:

操作表不起作用

危钱明
2023-03-14

我正在我的应用程序中使用ActionSheet。在我的iPhone上它可以工作,但在iPad模拟器上却不行。

这是我的代码:

@IBAction func dialog(sender: AnyObject) {

    let optionMenu = UIAlertController(title: nil, message: "Choose Option", preferredStyle: .ActionSheet)
    let deleteAction = UIAlertAction(title: "Delete", style: .Default, handler: {

        (alert: UIAlertAction!) -> Void in
        println("Filtre Deleted")
    })

    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: {
        (alert: UIAlertAction!) -> Void in
        println("Cancelled")
    })

    optionMenu.addAction(deleteAction)
    optionMenu.addAction(cancelAction)

    self.presentViewController(optionMenu, animated: true, completion: nil)
}

我的错误是:

由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“您的应用程序已呈现UIAlertControllerStyleActionSheet样式的UIAlertController()。具有此样式的UIAlertController的modalPresentationStyle为UIModalPresentationPopover。您必须通过警报控制器的popoverPresentationController提供此popover的位置信息。必须提供sourceView和sourceRect或barButtonItem。如果在演示警报控制器时不知道此信息,则可以在UIPopoverPresentationControllerDelegate方法-PrepareForPoverPresentation中提供此信息。”

共有3个答案

楚嘉纳
2023-03-14

斯威夫特3

如前所述,您应该将UIAlertController配置为在iPAD上的特定点上显示。

导航栏示例

    // 1
    let optionMenu = UIAlertController(title: nil, message: "Choose an option", preferredStyle: .actionSheet)

    // 2
    let deleteAction = UIAlertAction(title: "Option 1", style: .default, handler: {
        (alert: UIAlertAction!) -> Void in
        print("option 1 pressed")
    })
    let saveAction = UIAlertAction(title: "Option 2", style: .default, handler: {
        (alert: UIAlertAction!) -> Void in
        print("option 2 pressed")
    })

    //
    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: {
        (alert: UIAlertAction!) -> Void in
        print("Cancelled")
    })


    // 4

    optionMenu.addAction(deleteAction)
    optionMenu.addAction(saveAction)
    optionMenu.addAction(cancelAction)

    // 5

    optionMenu.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItem

    self.present(optionMenu, animated: true) { 
        print("option menu presented")
    }
仉臻
2023-03-14

我也有同样的问题。我有一个UIAlertController,在手机上运行良好,但在iPad上崩溃了。当从表格视图点击单元格时,该工作表弹出。

对于Swift 3,我在展示它之前添加了3行代码:

        ...

        sheet.popoverPresentationController?.sourceView = self.view
        sheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection()
        sheet.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)


        self.present(sheet, animated: true, completion: nil)
颛孙国源
2023-03-14

您需要在显示optionMenu之前提供源代码视图或按钮,因为在iPad上它是一个UIPopoverPresentationController,正如它在您的错误中所说的那样。这只意味着您的操作表指向按钮,让用户知道它是从哪里开始的。

例如,如果您通过点击右侧导航栏项来显示选项菜单。你可以这样做:

optionMenu.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItem

self.presentViewController(optionMenu, animated: true, completion: nil)

或者你可以这样设置一个视图:(你只需要其中一个)

optionMenu.popoverPresentationController?.sourceView = yourView

self.presentViewController(optionMenu, animated: true, completion: nil)

还要记住,如果将UIAlertControlllerStyle更改为Alert而不是操作表,则不需要指定此项。我相信你一定已经明白了,但我只是想帮助任何看到这一页的人。

 类似资料:
  • 问题内容: 我的父实体中有一个集合,如下所示: 现在发生事件,如果我对其元素之一在Set上执行remove()操作,则实际上并没有将其删除。 问题答案: 您的映射应如下所示: 如本文所述,由于您具有双向关联,因此必须使双方同步。 因此,最好的做法是致电: 这样一来,是要删除从 ,并设定了 协会。

  • 我尝试使用如下所示的指针修改BGRA mat: 但这给出不同的输出每一次,有时工作,有时给一个白色空白的图像。我怀疑如果这是由于不连续的数据,谁能帮助? 一个额外的问题,通常我们在访问行之前首先访问二维数组的列,因为它通常更快。但是,我必须使用访问像素。那么,我应该先循环遍历行然后遍历列吗?

  • 代码如下: 运行时,这是错误消息: 错误:不匹配'运算符*'(操作数类型是'std::__cxx11::字符串{aka std::__cxx11::basic_string 如何修复此错误并使程序正确运行?

  • 我有一个工作流,它执行一系列模糊测试,最后计算所有崩溃程序子目录中的文件总数。后来,在另一份工作中,我使用该号码向Slack发送通知。但是,由于某些原因,不会产生任何输出,最重要的是,即使崩溃程序的数量不是零,下一个作业也不会运行! 有人知道我做错了什么吗?谢谢!

  • 操作表可以让用户从多个可选的操作中选择一个 $.actions(buttons) - 创建并弹出一个操作表 buttons - 显示的几个按钮,你也可以把按钮分组 你可以通过 color: "danger" 来指定按钮的文案为红色或者通过 bg: "danger" 来指定按钮的背景为红色 <header class="bar bar-nav">   <h1 class="title">操作表</

  • CreateTables() 创建表使用 engine.CreateTables(),参数为一个或多个空的对应Struct的指针。同时可用的方法有 Charset() 和 StoreEngine(),如果对应的数据库支持,这两个方法可以在创建表时指定表的字符编码和使用的引擎。Charset() 和 StoreEngine() 当前仅支持 Mysql 数据库。 IsTableEmpty() 判断表是