2015-10-15 65 views
2

Im繼承NSTextView並覆蓋keyDown。我想檢測命令鍵組合。例如,Command-L。檢查keyDown event.modifierFlags會產生錯誤

Apple's documentation表明您只需的修飾符標誌(在通過NSEvent)與NSEventModifierFlags.CommandKeyMask。

當我這樣做:

let ck = NSEventModifierFlags.CommandKeyMask 

我收到一個奇怪的錯誤:

Binary operator '&' cannot be applied to two 'NSEventModifierFlags' operands. 

這是怎麼回事?這是迅速的2.0,xcode 7.

謝謝!

回答

7

Apple's documentation indicates that you simply and the modifier flags

的文檔仍然是指C和Objective-C。 Swift使用OptionSetType,它不使用按位運算符來檢查標誌。

相反,使用方法來檢查一個或多個標誌:

if theEvent.modifierFlags.contains(.CommandKeyMask) { 
     NSLog("command key down") 
    } 

    if theEvent.modifierFlags.contains(.AlternateKeyMask) { 
     NSLog("option key down") 
    } 

    if theEvent.modifierFlags.contains([.CommandKeyMask, .AlternateKeyMask]) { 
     NSLog("command and option keys down") 
    } 

要檢查單個鍵,使用intersect過濾掉任何不想要的標誌,然後用==檢查單個標誌:

let modifierkeys = theEvent.modifierFlags.intersect(.DeviceIndependentModifierFlagsMask) 

    if modifierkeys == .CommandKeyMask { 
     NSLog("Only command key down") 
    } 
+0

@LeoDabus更新回答。 – Darren

2

NSEventModifierFlags是Swift 2.0中的一個選項集。您可以使用包含方法來檢查它包含的命令修改鍵

override func keyDown(theEvent:NSEvent) { 
    if theEvent.characters == "l" && theEvent.modifierFlags.contains(.CommandKeyMask) { 
     print("command-L pressed") 
    } 
} 
+0

那不是我那樣低估了你。總之,爲什麼你從Event.modifierFlags.contains更改爲Event.modifierFlags.rawValue ==? – Chris

+0

只是爲了確保按下了一個修飾鍵 –

+0

因此,如果我以後想要檢查多個修飾鍵,那麼contains方法會更合適? – Chris