cocoa:菜单栏项目,以退格键作为等效键

时间:2012-04-26 04:13:55

标签: macos cocoa nsmenuitem backspace

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

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

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

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

3 个答案:

答案 0 :(得分:10)

请参阅NSMenuItem Class Reference中的setKeyEquivalent:方法说明:

  

如果要将Backspace键指定为菜单项的等效键,请使用带有NSBackspaceCharacter的单个字符串(在NSText.h中定义为0x08)并用于转发删除密钥,使用NSDeleteCharacter(在NSText.h中定义为0x7F)。 请注意,这些与按下这些键时NSEvent按键事件的字符不同。

顺便说一句,我通常可以通过按下它来在Interface Builder中将菜单项的Key Equivalent设置为退格,并且它在我的示例应用程序中工作(从Xcode模板创建,设置等效的File-Close到退格键)。我在Snow Leopard上使用Xcode 4.2。您的方案中是否存在任何键绑定冲突?

答案 1 :(得分:0)

这已经过时了,但我遇到了同样的问题,这让我很伤心。当我设置keyDown处理程序时,我最后没有调用super.keyDown(theEvent)。不知何故,多键快捷方式(如cmd + delete)仍会触发事件,但单字符退格键却没有。

这解决了它:

override func keyDown(theEvent: NSEvent) {
    ...
    super.keyDown(theEvent)
}

答案 2 :(得分:0)

使用“ \ 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的键码为8

menu=NSMenuItem(title: "Delete Note", action: nil, 
     keyEquivalent: String(Unicode.Scalar(NSBackspaceCharacter)!))