我想将IB中菜单栏项的等效键设置为退格键(删除光标左侧),但由于某种原因,这似乎不起作用。我可以为它分配各种键,例如CMD + Backspace,或fn + Backspace(删除键,即从右删除),但是当我指定普通退格键时,它根本就不会注册。
我是否必须做一些与使用退格键不同的事情?
PS:我不想以任何其他方式处理密钥。它必须是等效的菜单项键。
编辑:我使用IB设置菜单项的等效键。我知道我以前说过,但有些人看不懂。我知道如何在IB中设置它,它适用于除退格键之外的所有内容。
答案 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)!))