【问题标题】:cocoa: menu bar item with backspace as key equivalent可可:以退格键等效的菜单栏项
【发布时间】:2012-04-26 04:13:55
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这是 3 年前的事了。放松。
  • 我也有同样的问题 - 手术后六年多。没有冲突,并且所有其他关键等效项都有效 - 只是没有退格(在 IB 中也没有,也没有以编程方式设置它。)这很奇怪,因为在文档中明确提到了 NSBackspaceCharacter

标签: macos cocoa nsmenuitem backspace


【解决方案1】:

请参考NSMenuItem Class ReferencesetKeyEquivalent:方法的说明:

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

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

【讨论】:

  • 我在界面生成器中执行此操作,我确实尝试在那里设置等效键,但它不起作用。有谁知道是什么阻止了它的绑定?
【解决方案2】:

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

这解决了它:

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

【讨论】:

    【解决方案3】:

    使用“\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)!))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多