1

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

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

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

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

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

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

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

有谁知道如何做到这一点?

谢谢。

4

2 回答 2

0

文档说这不受支持。所以,即使你让它正常工作,它也可能在未来版本的 Mac OS X 中崩溃。

我建议将所有工具放入工具菜单中。冗余本质上并不是坏事,视力不佳的人可以更轻松地导航菜单,并且可以为那些还不熟悉您的工具图标的人提供快速参考。

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

于 2010-01-16T07:27:39.343 回答
0

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

http://github.com/carpeaqua/SGHotKeysLib

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

于 2010-01-21T11:23:25.547 回答