2010-11-04 12 views
5

He subclase NSWindow en una aplicación NSDocument para recibir eventos KeyDown.obtener modifierFlags en evento KeyDown sin presionar la tecla sin modificar junto con él!

he utilizado el código siguiente en mi subclasss ...

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

    NSLog(@"keyDown!"); 

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

Estoy recibiendo eventos clave cuando se presionan las teclas modificadoras no! También estoy recibiendo "Alt Key is Down" cuando presiono alt + z por ejemplo (alt + tecla no modificadora).

El problema aquí es que quiero manejar el evento cuando solo se presiona la tecla alt/opción sola, sin en combinación con otras teclas y -keyDown: ¡no se llama! Qué me estoy perdiendo ?

Gracias ...

Respuesta

7

Se podría atrapar la tecla Alt/Opción solo in -flagsChanged: en lugar de -keyDown:.

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

Sí! ¡Gracias! – Vassilis

+1

¿No es necesario que envie theEven a super? Probablemente no, ¿no? – Vassilis

0

Se puede hacer así:

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