【问题标题】:Standard mac key bindings behaving erratically标准 mac 键绑定行为不规律
【发布时间】:2015-03-01 09:56:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: macos cocoa key-bindings nsresponder


    【解决方案1】:

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

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

    【讨论】:

    • 它们是来自 ~\Library\KeyBindings\DefaultKeyBinding.dict 的标准 KeyBindings - 没有自定义,因此不要认为这是错误类型。还三重检查。
    • 我的接收者实际上是一个“NSView”(不是一个“NSTextField”)
    • 我还注意到一些组合键(在键绑定字典中)触发action methods,而其他组合触发keyDown。我真的不清楚打电话的顺序,而且我对 Apple Event Docs 很感兴趣。
    • 取消最后一条评论。似乎如果您覆盖“某些”操作方法,那么它们将被用作关键接口控制方法。说这是记录不足将是轻描淡写!
    【解决方案2】:

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

    NOT 在任何地方实现了 keyDown 方法,因此我的 action methods 没有作为常规操作方法触发。发生的事情是 keyDown 事件沿着响应者链向上传播到 NSWindow ,在那里它以类似于Key Interface ControlKIC 的方式进行处理。

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

    第二个奇怪的事情是 KIC 正在寻找 action 方法的实现,以知道如何处理箭头键按下。

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

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多