macos - 如何检测在 NSPressGestureRecognizer 事件期间是否按下了 CMD 或 Shift 键?

标签 macos cocoa appkit nsevent

在按下手势识别器的处理程序中,我尝试找出是否已按下 CMD 或 Shift,如下所示:

- (void)handlePress:(NSPressGestureRecognizer*)gr {
    NSEventModifierFlags flags = [[NSApp currentEvent] modifierFlags];
    if (flags & NSCommandKeyMask) {
        NSLog(@"CMD pressed");
    }
}

但是,该标志只能在 keyDown 或 keyUp 事件处理程序方法中正确设置。 NSGestureRecognizer 似乎没有公开事件对象,因此我从 NSApp 获取 currentEvent 。我错过了什么?

最佳答案

您可以使用 NSGestureRecognizerDelegate 来代替子类化,如下所示:

extension ViewController : NSGestureRecognizerDelegate
{
    func gestureRecognizer(_ gestureRecognizer: NSGestureRecognizer,
                           shouldAttemptToRecognizeWith event: NSEvent) -> Bool {
        return event.modifierFlags.contains(.command)
    }
}

从技术上讲,这只会识别鼠标按下时按住的修饰键,但从 UI 的角度来看,这可能正是您想要的。

关于macos - 如何检测在 NSPressGestureRecognizer 事件期间是否按下了 CMD 或 Shift 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159656/

相关文章:

cocoa - 我可以在 Cocoa 框架代码中设置断点吗?

macos - NSTrackingArea 和性能

c++ - 如何导出到我的 mac (C++) 上的 vsproject?

eclipse - 为什么不能在Eclipse中输入星号?

cocoa - NSString 和 UTF8 十六进制转换

iphone - UIButton.layer.cornerRadius 不存在?

cocoa - 在后台操作完成后进行 NSArrayController 获取

swift - 如何使用NSControl的edit(withFrame :editor:delegate:event:)?

macos - 将多个 NSViewController 连接到一个 Nib

swift - 解析 PFUser 未注册子类