Cocoa - NSEvent响应SHIFT键?

lab*_*b12 3 cocoa objective-c nsevent

我想知道NSEvent是否响应键盘上的"Shift"键.我正在调试我的应用程序时记录keyCodes,并且我没有获得shift键的keyCode值.

谢谢,

凯文

编辑:这是我从用户响应中使用的代码.

-(void)keyDown:(NSEvent*)event
{   

    if ([event modifierFlags] == NSShiftKeyMask) {
        NSLog(@"Shift key pressed");
    }
}
Run Code Online (Sandbox Code Playgroud)

Shift键仍未被识别...

Ric*_*ard 15

看一下flagsChanged:方法吧NSResponder.

像这样的东西:

- (void) flagsChanged:(NSEvent *) event {
    if ([event modifierFlags] & NSShiftKeyMask) {
        //Do something
    }
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*ski 9

您的代码示例无法正常工作,因为它-modifierFlags是一个位掩码,因此测试掩码是否相等NSShiftKeyMask将无法正常工作.您需要使用按位运算AND符来测试是否设置了标志:

if ([event modifierFlags] & NSShiftKeyMask) {
    NSLog(@"Shift key pressed");
}
Run Code Online (Sandbox Code Playgroud)

另外,如果您想将此结果存储在a中BOOL,则需要检查它是否不等于0,例如:

BOOL shiftKeyPressed = ([event modifierFlags] & NSShiftKeyMask) != 0;
Run Code Online (Sandbox Code Playgroud)

如果你把它留下来,那么BOOL将评估为NO(除非你从位掩码中拉出的值是1,这被定义为YES;因为-modifierFlags这不会在掩码开始时发生1 << 16).