swift - 斯威夫特:尝试使用闭包而不是#selector但不起作用
问题描述
我正在尝试使用闭包而不是选择器,但它不起作用。打印不工作你能帮我吗
我的自定义操作:
final class Action: NSObject {
private let _action: () -> ()
init(action: @escaping () -> ()) {
_action = action
super.init()
}
@objc func action() {
_action()
}
}
使用:
let menu = NSMenu()
let action = Action { print("My action") }
menu.addItem(NSMenuItem(title: "Delete", action: #selector(action.action), keyEquivalent: ""))
tableView.menu = menu
当我单击菜单时,删除选项不打印,为什么它不起作用?
解决方案
尝试为NSMenuItem
. 根据 Apple 文档,这似乎没有包含在初始化程序中,但可以在之后设置。
let menu = NSMenu()
let action = Action { print("My action") }
var menuItem = NSMenuItem(title: "Delete", action: #selector(action), keyEquivalent: "")
menuItem.target = action // This refers to the action instance
menu.addItem(menuItem)
tableView.menu = menu
推荐阅读
- python - WinError 10053 已建立的连接被主机中的软件中止”
- swift - 将 tableView 宽度设置为等于最大表格的单元格宽度?
- python - 在树中查找最低共同祖先 [二进制] 但在 python 中有多个节点?
- fortran - (1) 处的标签与 (2) 处的 goto 语句不在同一个块中
- javascript - 使用 iOS 返回按钮阻止表单提交
- java - 未定义类型 int、ArrayList 的运算符
- python - 如何在不进行任何舍入的情况下将浮点数转换为小数点后 4 位?
- vba - 有没有办法使用 VBA 将 Access 数据库保存到 SharePoint 文件夹?
- php - 在 woocommerce 电子邮件中输出产品自定义字段(图像)
- java - 使用 NSSM 从 Jar 文件创建 Windows 服务,它作为进程运行但不运行程序