如何定义无需指定keyEquivalent且可正常交互的NSMenuItem?
核心原因
你之前用无参初始化后菜单项呈灰色,是因为没有给它设置action和target——系统找不到对应的响应方法,就会自动禁用该菜单项。
两种正确实现方式
方式1:用指定初始化器,传空字符串作为快捷键
直接使用带参数的初始化方法,把keyEquivalent设为空字符串"",就能创建无快捷键的可点击菜单项:
let showWindow1 = NSMenuItem(title: "Show Window 1", action: #selector(showWindow1), keyEquivalent: "") // 若响应方法在当前类中,需设置target为self showWindow1.target = self
方式2:无参初始化后补全必要属性
如果偏好无参初始化,必须手动设置action、target(可选显式设置空快捷键):
let showWindow1 = NSMenuItem() showWindow1.title = "Show Window 1" showWindow1.action = #selector(showWindow1) showWindow1.target = self showWindow1.keyEquivalent = "" // 默认就是空,显式设置更清晰
注意事项
响应方法必须添加@objc修饰,否则无法被系统识别:
@objc func showWindow1() { // 这里写显示窗口1的逻辑 }
内容的提问来源于stack exchange,提问作者swiftPunk
相关产品推荐
相关产品推荐

