2013-01-14 33 views
3

我在NSView中使用flagsChanged來觸發事件,當修改鍵被按下或釋放時。但是,我不太明白如何在發生這種情況時獲得密鑰的實際新狀態,而不是手動檢查每個修改鍵的狀態。我目前使用我自己的狀態數組來檢查它,但是這看起來是錯誤的,並且不可靠。我如何正確地做到這一點?在NSView中獲取確切的修飾鍵狀態flagsChanged

回答

3

只是檢查被傳遞到flagsChanged:對你是感興趣的各種修飾鍵口罩事件:

- (void)flagsChanged:(NSEvent *)theEvent { 
    if (([theEvent modifierFlags] & NSAlternateKeyMask) == NSAlternateKeyMask) { 
     // Do something based on the alt/option key being pressed 
    } else if (([theEvent modifierFlags] & NSCommandKeyMask) == NSCommandKeyMask){ 
     // Do something based on the command key being pressed 
    } 
} 
+0

嗯,可是我怎麼知道,例如,如果它是這是正確的或左Alt按下或釋放? – toastie

+0

ie ie hold down alt,then right right alt up and down,(([theEvent modifierFlags]&NSAlternateKeyMask == NSAlternateKeyMask)will left true while left alt is down。 – toastie

+1

好的,我發現了這個,好像做了訣竅:http://stackoverflow.com/questions/10715910/is-there-a-way-to-differentiate-between-left-and-right-shift-keys-being-pressed 非常愚蠢的做事方式我必須說:) – toastie

0

我不確定你的意思是選擇「手動」。 flagsChanged:方法爲您提供NSEvent*,並且您可以將該消息傳遞給modifierFlags消息。