2010-11-04 7 views
5

J'ai sous-classé NSWindow dans une application NSDocument afin de recevoir des événements keyDown.get modifierFlags dans l'événement keyDown sans appuyer sur la touche non-modifiable avec elle!

J'ai utilisé le code suivant dans mon subclasss ...

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

    NSLog(@"keyDown!"); 

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

Je reçois des événements clés lorsque les touches non-modificateur sont pressés! Je reçois aussi "Alt Key is Down" quand j'appuie sur alt + z par exemple (alt + non-modifierkey).

Le problème ici est que je veux gérer l'événement lorsque seule la touche alt/option est pressée seule, sans combinaison avec d'autres touches et -keyDown: ne se fait pas appeler! Qu'est-ce que je rate ?

Merci ...

Répondre

7

Vous pouvez attraper la touche Alt/Option seul in -flagsChanged: au lieu de -keyDown:.

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

Ouais! Je vous remercie! – Vassilis

+1

Est-ce que je n'ai pas besoin de transférer le même sur Super? Probablement pas ha? – Vassilis

0

Vous pouvez faire comme ceci:

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