NSResponder在按下Cmd ⌘键时无法接收keyUp事件

15

我正在使用一个自定义的NSView子类,并通过keyDown/keyUp方法接收键盘事件,一切都正常工作,除了按下"Cmd ⌘"键时,keyDown事件会像往常一样触发,但是keyUp事件却从未到来。

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

有人知道为什么会出现这种情况吗?感觉像是一个bug,但可能只是奇怪的“正确行为”,有什么解决办法吗(除了使用其他修饰键或使用直接的HID访问之类的)?

谢谢。


1
这可能是一个可行的解决方案:https://dev59.com/2FHTa4cB1Zd3GeqPQljD?rq=1 我遇到了同样的问题。 - Bikush
1个回答

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");
        }
    }
}

7
OP 询问与命令键一起按下的键的 keyUp 事件。但是,这个 keyUp 事件从未到达。 - Tim Kane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接