Objective c 在NSView flagsChanged中获取精确的修改器键状态

Objective c 在NSView flagsChanged中获取精确的修改器键状态,objective-c,macos,cocoa,nsview,Objective C,Macos,Cocoa,Nsview,我使用NSView中的flagsChanged在按下或释放修改器键时触发事件。但是,除了手动检查每个修改器键的状态外,我不太了解如何在发生这种情况时获取键的实际新状态。我目前正在使用我自己的状态数组来检查它,但这似乎是错误的,而且不可靠。如何正确执行此操作?我不知道您所说的“手动”是什么意思。flagshanged:方法为您提供一个NSEvent*,您可以传递一条modifierFlags消息。只需对照您感兴趣的各种修饰符键掩码检查传递到flagshanged:的事件: - (void)flag

我使用NSView中的flagsChanged在按下或释放修改器键时触发事件。但是,除了手动检查每个修改器键的状态外,我不太了解如何在发生这种情况时获取键的实际新状态。我目前正在使用我自己的状态数组来检查它,但这似乎是错误的,而且不可靠。如何正确执行此操作?

我不知道您所说的“手动”是什么意思。
flagshanged:
方法为您提供一个
NSEvent*
,您可以传递一条
modifierFlags
消息。

只需对照您感兴趣的各种修饰符键掩码检查传递到
flagshanged:
的事件:

- (void)flagsChanged:(NSEvent *)theEvent {
   if (([theEvent modifierFlags] & NSAlternateKeyMask) == NSAlternateKeyMask) {
       // Do something based on the alt/option key being pressed
    } else if (([theEvent modifierFlags] & NSCommandKeyMask) == NSCommandKeyMask){
       // Do something based on the command key being pressed
    }
}

嗯,但是我怎么知道,例如,按下或释放的是右alt还是左alt?也就是说,我按住左alt,然后上下按下右alt,(([theEvent modifierFlags]&NSAlternateKeyMask)==NSAlternateKeyMask)在按住左alt时将保持为真OK,我发现了这个,这似乎起到了作用:我必须说的是,做事情的方式非常愚蠢:)你不需要
==NSAlternateKeyMask
部分