如何在用户单击NSButton时检查Option键是否关闭

时间:2013-05-13 23:31:51

标签: objective-c nsbutton

我在NSPanel上有一些复选框和文本字段,打开以获取用户参数。 作为一个选项,我希望用户能够在按任意复选框时按住选项键来设置/取消设置面板上的所有复选框。

当用户点击按钮时,我不确定在哪里/如何检查键盘正在做什么。

8 个答案:

答案 0 :(得分:15)

检查[NSEvent modifierFlags] ...

if ([NSEvent modifierFlags ] & NSAlternateKeyMask)
{
    //do something
}

答案 1 :(得分:2)

只是我的2c,一个Swift 3版本:

if NSEvent.modifierFlags().contains(NSEventModifierFlags.command) {
    print("Bingo")
}

可以在NSEventModifierFlags的文档中看到其余标志。

答案 2 :(得分:0)

对于那些使用swift并挣扎于此的人来说。

if NSEvent.modifierFlags.rawValue & NSEvent.ModifierFlags.command.rawValue != 0 {
    // to do something.
}

答案 3 :(得分:0)

Swift 2.2:

if NSEvent.modifierFlags().contains(.AlternateKeyMask) {
    print("Option key pressed")
}

答案 4 :(得分:0)

更新:NSAlternateKeyMask已被弃用。请改用NSEventModifierFlagOption

有关所有修饰符标志的完整概述,请参见NSEventModifierFlags

答案 5 :(得分:0)

迅速4:

bool

答案 6 :(得分:0)

在macOS 10.14上,从ObjC中的NSGestureRecognizerDelegate方法调用时,[NSEvent modifierFlags]总是为我返回0,无论按下了什么键。通过使用[NSApp currentEvent]而不是NSEvent,我能够可靠地解决此问题。

- (BOOL)isOptionKeyDown {
    NSEventModifierFlags keyEventFlags = [[NSApp currentEvent] modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask;
    return (keyEventFlags & NSEventModifierFlagOption) != 0;
}

答案 7 :(得分: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!")
    }
}