5

我在 NSDocument 应用程序中对 NSWindow 进行了子类化,以便接收 keyDown 事件。

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

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

    NSLog(@"keyDown!");

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

按下非修饰键时,我会收到键事件!例如,当我按下 alt+z(alt+非修饰键)时,我也会收到“Alt Key is Down”。

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

谢谢...

4

2 回答 2

7

您可以单独抓住 Alt/Option 键-flagsChanged:不是-keyDown:.

-(void)flagsChanged:(NSEvent*)theEvent {
    if ([theEvent modifierFlags] & NSAlternateKeyMask) {
        NSLog(@"Alt key Down (again)!");
    }
}
于 2010-11-04T21:49:45.577 回答
0

你可以这样做:

-(void)flagsChanged:(NSEvent*)theEvent {
    [super flagsChanged:theEvent];
    if ((([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask) & NSAlternateKeyMask) > 0) {
        NSLog(@"Alt key Down (again)!");
    }
}
于 2016-03-01T14:37:25.643 回答