如何在Cocoa app bundle中的dict文件中指定键绑定?

时间:2010-01-14 15:07:29

标签: cocoa macos key-bindings

(这是关于KVC / KVO和键值绑定的问题。)

我正在使用“工具”面板编写应用程序。可以使用单字母键(如“M” - “移动工具”)选择每个工具。即使没有主窗口且未选择工具面板(不是“按键”),也可以选择工具。

文档说原始密钥事件不会传播到应用程序委托和文档控制器(因此我不能依赖onKeyDown,因为它应该发生在WindowController中)。但是“动作事件”(绑定到选择器的键)将发送到应用程序,应用程序委托和文档控制器。

我知道设置此类全局绑定的两种方法:通过Interface Builder中的NSMenuItem键等效或使用〜/ Library / KeyBindings / DefaultKeyBinding.dict文件(指定所有应用程序的全局绑定)。

菜单项方法不好,因为我不想用可以从工具面板触发的命令污染我的菜单。

我想以编程方式设置此类绑定,或者在Xcode和TextMate等捆绑的KeyBindings.dict中指定它们。

但是,我找不到文档或示例如何命名这样的dict文件以及如何将其连接到应用程序。 Xcode使用PBKeyBinding.dict文件名,TextMate使用KeyBindings.dict。 Info.plist没有选项告诉应用程序读取dict文件。

有人知道如何做到这一点吗?

感谢。

2 个答案:

答案 0 :(得分:0)

The documentation says this isn't supported.因此,即使您使用它,它也可能在未来版本的Mac OS X中出现。

我建议将所有工具放入“工具”菜单中。冗余本身并不是很糟糕,视觉不佳的人可以更容易地浏览菜单,并且可以作为那些还不熟悉工具图标的人的快速参考。

如果“工具”菜单确实没有意义,可以设置“工具”菜单项的隐藏属性(其子菜单是“工具”菜单)。这样,“工具”菜单项仍然位于主菜单(菜单栏)中,因此仍应将其键绑定与操作相关联,但用户无法看到它。

答案 1 :(得分:0)

事实上,这个库可以满足我的需求:

http://github.com/carpeaqua/SGHotKeysLib

它使用RegisterEventHotKey函数(需要与Carbon框架链接)。