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

在 Swift 中获取 UIAlertAction 的处理程序

邵祺
2023-03-14

如何在Swift中获取UIAlertAction的处理程序。它是在初始化时设置的,但是我没有找到任何属性来保持动作的闭包。闭包是类型(UIAlertAction)-


共有2个答案

汪同
2023-03-14

UIAlertAction类没有公开成员/属性。然而,我们可以通过子类化UIAlertAction来管理它,并让某个名为“actionHandler”的成员来存储它。

谢宸
2023-03-14

我为此创建了一个子类,如下所示:

/// An UIAlertAction which saves the handler. Can be used for unit testing the action callback.
final class UIExecutableAlertAction: UIAlertAction {

    private var handler: ((UIAlertAction) -> Swift.Void)?

    static func with(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Swift.Void)? = nil) -> UIExecutableAlertAction {
        let action = UIExecutableAlertAction(title: title, style: style, handler: handler)
        action.handler = handler
        return action
    }

    func execute() {
        handler?(self)
    }

}

可以这样使用:

let myAction = UIExecutableAlertAction.with(title: "title", style: .destructive, handler: { [weak self] _ in
    // Do something
})
 类似资料:
  • 问题内容: 我向用户展示了一个,但我不知道如何编写处理程序。这是我的尝试: 我在Xcode中遇到很多问题。 该文件说 目前,整个块/封盖都让我有些头疼。任何建议都非常感谢。 问题答案: 而不是将自己放在处理程序中,而应放置(提示:UIAlertAction!)。这应该使您的代码看起来像这样 这是在Swift中定义处理程序的正确方法。 正如Brian在下面指出的那样,还有更简单的方法来定义这些处理程

  • 我正在向用户呈现一个< code>UIAlertView,但我不知道如何编写处理程序。这是我的尝试: 我在Xcode中遇到了很多问题。 文档说

  • 我有一个UITableView,在委托(视图控制器)中,我已经实现了该函数 然后,我测试编辑样式 作为删除的一部分,我请求用户确认,如果他们选择“是”,与该行相关的项目将被删除,如果他们选择“否”,我将重置编辑样式。 我似乎遇到的问题是没有调用任何完成处理程序。我在其他地方使用过这种格式,没有任何问题。 该警报将显示标题、消息以及按钮“取消”和“是”。如果我点击其中任何一个,什么都不会发生。警报被

  • 我正在尝试将我的UIAlertViews更改为UIAlertController。我为它设置了这个操作: 但是,处理程序直到动作被点击大约一秒钟后才运行。有什么方法可以加快速度吗?

  • 我只想确认UIAlertAction的处理程序是一个非转义lambda函数? 我做了ctrl右键单击并查找了UIAlertAction定义,默认情况下它看起来不像转义。这意味着我应该做 在所有UIAlertAction完成块中使用wself而不是self? 在UIKit下 其中处理程序未显示@escaping

  • 亲爱的史塔克弗劳尔, Swift/UIKit上的任何专家都可以在下面的屏幕截图中看到我做错了什么吗? Xcode似乎找不到基于标题、样式和处理程序的UIAlertAction的方便初始值设定项,我也不知道有任何其他方式来初始化UIAlertAction。实际上,处理器不会为零。 先谢谢你了, 杰米