标准 mac 键绑定行为不稳定

Standard mac key bindings behaving erratically

我正在尝试使用标准 mac 键绑定(在 ~\Library\KeyBindings\DefaultKeyBinding.dict 中找到)映射到 NSResponder 中找到的 action methods。我在我的自定义 类 之一中覆盖这些 action methods 以在我的 UI 元素之间执行自定义导航。

在 keyBindings 文件中,^-p 都映射到 action method moveUp:

令人困惑的是,当我在我的应用程序中按下 时,操作方法会触发,但是当我按下 ^-p 时,什么也没有发生(只是一声哔哔声,表明它找不到任何匹配的东西在响应者链中)。

你在哪里定义键绑定? textView:doCommandBySelector: 还是在 keyBindings 文件中?您的接收器是否处于单线模式?

根据我的经验,哔声通常意味着键绑定定义中有错误...

随后的测试揭示了以下内容(执行堆栈跟踪):

NOT 在任何地方实施了 keyDown 方法,所以我的 action methods 不作为常规操作方法触发。发生的事情是 keyDown 事件沿着响应者链向上传播到 NSWindow,在那里它以类似于 Key Interface Control KIC 的方式被处理。

第一个奇怪的事情是 KIC 被记录在发送 keyDown 事件之前发生,这实际上是在 keyDown 事件响应链的末尾。 KIC 显然没有从标准键绑定字典中获取其键绑定,而是在寻找自己的键——其中一些键必须包含用于导航的箭头键。

第二个奇怪的事情是 KIC 正在查看 action 方法的实现,以了解如何处理箭头键。

据我所知,此行为未记录在案,是 KIC 和操作方法的混淆组合。但就是这样。