5

我想将 IB 中菜单栏项的等效键设置为退格键(删除光标左侧),但由于某种原因,这似乎不起作用。我可以为其分配各种键,例如 CMD+Backspace 或 fn+Backspace(删除键,即从右侧删除),但是当我分配普通的退格键时,它根本不注册。

我是否必须做一些不同的事情才能使用退格键?

PS:我不想以任何其他方式处理密钥。它必须是等效的菜单项键。

编辑:我使用 IB 为菜单项设置等效键。我知道我之前说过,但有些人看不懂。我知道如何在 IB 中设置它,它适用于除退格键之外的所有内容。

4

3 回答 3

11

请参考NSMenuItem 类参考setKeyEquivalent:中的方法描述:

如果要将 Backspace 键指定为菜单项的等效键,请使用单个字符串NSBackspaceCharacter(在NSText.has中定义0x08),对于 Forward Delete 键,使用NSDeleteCharacter(在NSText.has中定义0x7F)。请注意,这些字符与您NSEvent在按下这些键时从按键事件中获得的字符不同。

顺便说一句,我通常可以通过按下它在界面生成器中将菜单项的键等效项设置为退格键,它在我的示例应用程序中工作(从 Xcode 模板创建,将文件关闭的键等效项设置为退格键)。我在雪豹上使用 Xcode 4.2。您的方案中是否存在任何键绑定冲突?

于 2012-04-26T04:39:19.480 回答
2

这是旧的,但我有同样的问题,它正在杀死我。事实证明,当我设置 keyDown 处理程序时,我最后没有调用 super.keyDown(theEvent) 。不知何故,多键快捷键(如 cmd+delete)仍会触发事件,但单字符退格键不会。

这修复了它:

override func keyDown(theEvent: NSEvent) {
    ...
    super.keyDown(theEvent)
}
于 2016-04-12T19:33:08.180 回答
2

使用“\u{08}”作为密钥等效字符串,它可以工作

menu=NSMenuItem(title: "Delete Note", action: nil, 
     keyEquivalent: "\u{08}")

我从

let menu=window!.menu
print(menu?.item(at: 1)?.submenu?.item(at: 1)?.keyEquivalent)//set Delete key from xib file

NSBackspaceCharacter 也有 keycode 8

menu=NSMenuItem(title: "Delete Note", action: nil, 
     keyEquivalent: String(Unicode.Scalar(NSBackspaceCharacter)!))
于 2020-08-02T07:56:40.000 回答