【问题标题】:NSResponder not receiving keyUp event when Cmd ⌘ key held down按住 Cmd ⌘ 键时 NSResponder 未收到 keyUp 事件
【发布时间】:2013-05-12 07:51:33
【问题描述】:

我正在使用 NSView 的自定义子类并通过 keyDown/keyUp 方法接收键盘事件,一切正常,除非按下“Cmd ⌘”键,keyDown 事件正常触发但 keyUp 事件永远不会出现。

在我们的例子中,我们自己使用箭头键来向左/向右/向上/向下移动图像,如果用户在按住“Cmd ⌘”的同时按向左/向右,它将改为旋转图像。由于我们得到了 keyDown 事件,图像开始旋转,但它永远不会停止,因为 keyUp 永远不会出现。其他修饰符没有这个问题(例如,如果在按下另一个键的同时按住 shift、ctrl 或 alt,我们会按预期获得 keyUp)。一种选择是使用不同的修饰符,但最好使其与 PC 版本保持一致(当在 Windows 上使用 Ctrl 时,Cmd 用作替代,使其与标准复制/粘贴命令等保持一致)。

有人知道为什么会这样吗?感觉像是一个错误,但可能只是奇怪的“正确行为”,任何如何绕过它的想法(除了使用替代修饰符或使用直接 HID 访问之类的方法)。

谢谢。

【问题讨论】:

标签: macos cocoa nsview keyup nsresponder


【解决方案1】:

您可以使用flagsChanged 在修改键向下/向上时收到通知,请参阅:Technical Q&A QA1519 Detecting the Caps Lock Key,它适用于其他修改键。更多修饰键代码见Carbon/Frameworks/HIToolbox/Events.h

- (void)flagsChanged:(NSEvent *)event
{
    if (event.keyCode == 0x37) { // kVK_Command
        if (event.modifierFlags & NSCommandKeyMask) {
            NSLog(@"Command key is down");            
        } else {
            NSLog(@"Command key is up");
        }
    }
}

【讨论】:

  • OP 询问 keyUp 事件是否与命令键一起按下的键。这个 keyUp 事件永远不会到达。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 2014-05-24
  • 2017-05-15
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
相关资源
最近更新 更多