在keyDown事件中获取modifierFlags而不按下非修饰键!

时间:2010-11-04 21:39:58

标签: objective-c events handle keydown modifier

我在NSDocument应用程序中已经将NSWindow子类化,以便接收keyDown事件。

我在子类中使用了以下代码......

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

    NSLog(@"keyDown!");

    if ([theEvent modifierFlags] & NSAlternateKeyMask) {
        NSLog(@"Alt key Down!");
    }
    else
        [super keyDown:theEvent];
}

按下非修改键时,我收到了关键事件! 当我按下alt + z时,我也收到“Alt Key is Down”(alt + non-modifierkey)。

这里的问题是我想在单独按下alt / option键时处理事件,而不与其他键组合并且-keyDown:不会被调用!我错过了什么?

...谢谢

2 个答案:

答案 0 :(得分:7)

您可以单独使用Alt / Option键in -flagsChanged:而不是-keyDown:

-(void)flagsChanged:(NSEvent*)theEvent {
    if ([theEvent modifierFlags] & NSAlternateKeyMask) {
        NSLog(@"Alt key Down (again)!");
    }
}

答案 1 :(得分:0)

你可以这样做:

-(void)flagsChanged:(NSEvent*)theEvent {
    [super flagsChanged:theEvent];
    if ((([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask) & NSAlternateKeyMask) > 0) {
        NSLog(@"Alt key Down (again)!");
    }
}