2010-11-04 6 views
5

Ho sottoclassato NSWindow in un'applicazione NSDocument per ricevere eventi keyDown.get modificatoreFlags nell'evento keyDown senza premere contemporaneamente il tasto non modificatore!

Ho usato il seguente codice nel mio subclasss ...

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

    NSLog(@"keyDown!"); 

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

che sto ricevendo gli eventi chiave quando si premono i tasti non modificatori! Sto anche ricevendo "Alt Key is Down" quando premo alt + z per esempio (alt + tasto non modificabile).

Il problema qui è che voglio gestire l'evento quando solo il tasto alt/option viene premuto da solo, senza in combinazione con altri tasti e -keyDown: non viene chiamato! Cosa mi manca?

Grazie ...

risposta

7

Si potrebbe prendere il tasto Alt/Opzione solo in -flagsChanged: invece di -keyDown:.

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

Yeah! Grazie! – Vassilis

+1

Non ho bisogno di inoltrare theEven a super? Probabilmente no? – Vassilis

0

Si può fare in questo modo:

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