在NsView中,如何判断用户是否按住Shift键

时间:2017-06-27 10:36:16

标签: swift macos

每个人都很好,我在他们自己的ViewController中,我希望能够确定用户是按住Shift键盘还是Command键。请熟悉的朋友告诉我,我应该如何实现。谢谢你多!

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是使用本地事件监视器described here)。

此方法监视您要求的类型的所有事件。因此,例如,您可以使用它来获得所有按键通知,如下所示:

NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
    self.keyDown(with: $0)
    return $0
}

每次按下一个键时,这将为您提供NSEvent的实例(每次实际按下该键时,还会释放一个.keyUp,该键在释放时触发)。

然后NSEvent类有一组ModifierFlags,您可以查询并查看这些修改器中是否有一个或多个按下了键。因此,您的keyDown方法(覆盖NSResponder中的方法)可能会执行以下操作:

override func keyDown(with event: NSEvent) {
    if event.modifierFlags.contains(.shift) {
        print("Shift pressed")
    }
    if event.modifierFlags.contains(.command) {
        print("Command pressed")
    }
    super.keyDown(with: event)
}

完整示例

import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
            self.keyDown(with: $0)
            return $0
        }
    }

    override var representedObject: Any? {
        didSet {
            // Update the view, if already loaded.
        }
    }

    override func keyDown(with event: NSEvent) {
        if event.modifierFlags.contains(.shift) {
            print("Shift pressed")
        }
        if event.modifierFlags.contains(.command) {
            print("Command pressed")
        }
        super.keyDown(with: event)
    }
}

另见

希望对你有所帮助。