2016-04-28 6 views
0

Ich versuche zu erkennen, ob die U Taste gedrückt ist oder nicht, und wenn es ist sollte es print("BUT...BUT.."); aber ich bin mir nicht sicher, wie Sie für verschiedene Schlüssel, wie die Dokumentation für Tastendrücke ziemlich schlecht ist .. fand ich eine Antwort mit keycodes aber sie nur für QWERTY-TastaturenÜberprüfen, ob die u-Taste gedrückt wird Swift Cocoa

viewcontroller.swift

override func viewDidLoad(){ 
    super.viewDidLoad(); 
    let f = Foo(); 
    f.doSonethimg(); 
} 

override func keyDown(theEvent: NSEvent){ 
    let f = Foo(); 
    f.KeyDown(theEvent); 
} 

Foo.swift

arbeiten
public func doSonething(){ 
    print("Hello from Dylib"); 
} 

public func keyDown(event: NSEvent){ 
     if let keyString = theEvent.charactersIgnoringModifiers where keyString == "u" || keyString == "U" { 
    Swift.print("BUT...BUT…") 
} 
} 

Wie würde ich die keyDown Funktion ändern, um auf U zu antworten und was ist der Standardschlüssel?

Ich habe betrachtet - Detecting key press event in Swift und https://superuser.com/questions/399430/mouse-button-and-keypress-counter-for-mac-os-x

auch sehen - https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/HandlingKeyEvents/HandlingKeyEvents.html - Überschreiben der keyDown: Methode

+1

Beachten Sie, dass das Verhalten der Funktionstasten (wie F-Tasten) hängt von einer Einstellung in den Systemeinstellungen – vadian

+0

das ist wahr, danke, ich werde meine Frage entsprechend aktualisieren – Gerwin

+1

Haben Sie die Dokumentation von NSEvent gelesen? NSEvent verfügt über Methoden zum Abrufen von Schlüsselereignisinformationen wie 'Zeichen'. Keydown-Ereignisse haben keinen Standardschlüssel. – Willeke

Antwort

4

Sie können für ein Zeichen leicht überprüfen, indem NSEvent s charactersIgnoringModifiers Eigenschaft.

func keyDown(theEvent: NSEvent) { 
    if let keyString = theEvent.charactersIgnoringModifiers where keyString == "u" || keyString == "U" { 
     Swift.print("BUT...BUT…") 
    } 
} 

Hinweis: Es gibt einen Unterschied zwischen Kontrolle für 'u' und 'U'. Sie werden modifiziert durch Shift. Wenn Sie also beide erkannt haben möchten, prüfen Sie beide. (wie in dem obigen Beispiel)

Responder Ketten:
Die keyDown Funktion nur aufgerufen wird, wenn die Ansicht bzw. Viewcontroller in den Responder Chain sogenannten teilhat.

Um Ihren viewController so einzurichten, dass er zur Responder-Kette gehört, lesen Sie den folgenden Code: documentation.

+0

Das KeyDown-Ereignis in meinem Viewcontroller wird nie aufgerufen, so dass es nicht eingeben wird, wenn Sie wissen, warum dies ist? – Gerwin

+0

Ich habe meine Antwort aktualisiert – mangerlahn

Verwandte Themen