我在打开以获取用户参数的 NSPanel 上有几个复选框和文本字段。作为一个选项,我希望用户能够在按下任何复选框时按住选项键来设置/取消设置面板上的所有复选框。
当用户单击按钮时,我不确定在哪里/如何检查键盘在做什么。
我在打开以获取用户参数的 NSPanel 上有几个复选框和文本字段。作为一个选项,我希望用户能够在按下任何复选框时按住选项键来设置/取消设置面板上的所有复选框。
当用户单击按钮时,我不确定在哪里/如何检查键盘在做什么。
检查[NSEvent modifierFlags] ...
if ([NSEvent modifierFlags ] & NSAlternateKeyMask)
{
//do something
}
只是我的 2c,一个 Swift 3 版本:
if NSEvent.modifierFlags().contains(NSEventModifierFlags.command) {
print("Bingo")
}
可以在NSEventModifierFlags
.
更新:NSAlternateKeyMask
现已弃用。改为使用NSEventModifierFlagOption
。
有关所有修饰符标志的完整概述,请参阅NSEventModifierFlags。
斯威夫特 4:
func optionKeyPressed() -> Bool
{
let optionKey = NSEvent.modifierFlags.contains(NSEvent.ModifierFlags.option)
return optionKeyPressed
}
if optionKeyPressed()
{
print ("option key pressed")
}
斯威夫特 2.2:
if NSEvent.modifierFlags().contains(.AlternateKeyMask) {
print("Option key pressed")
}
在 macOS 10.14 上,当从 ObjC 中的 NSGestureRecognizerDelegate 方法调用时,[NSEvent modifierFlags]
总是为我返回 0,无论哪些键被关闭。我能够通过使用[NSApp currentEvent]
而不是可靠地解决这个问题NSEvent
。
- (BOOL)isOptionKeyDown {
NSEventModifierFlags keyEventFlags = [[NSApp currentEvent] modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask;
return (keyEventFlags & NSEventModifierFlagOption) != 0;
}
Swift 5 - 还有助于区分 Option 键的“向上”和“向下”按下
override func flagsChanged(with event: NSEvent) {
print(event)
if event.keyCode == 58 && event.modifierFlags.contains(NSEvent.ModifierFlags.option){
print("Option Key is down!")
}
else if(event.keyCode == 58)
{
print("Option Key is up!")
}
}
它适用于使用 swift 并为此苦苦挣扎的人。
if NSEvent.modifierFlags.rawValue & NSEvent.ModifierFlags.command.rawValue != 0 {
// to do something.
}