2016-12-25 3 views
1

Ich versuche, ein einfaches Programm in Swift 3 zu schreiben, wo ich jedes Mal eine Aktion ausführen muss, wenn der Benutzer eine Pfeiltaste drückt. Nach ein wenig Recherche fand ich, dass die Methode, die ich verwenden musste, keyDown(with event: NSEvent) war; Das Problem ist, dass es nicht aufgerufen wird, wenn ich irgendeine Taste drücke.Swift 3 (macOS): keyDown (mit Ereignis: NSEvent) wird nicht aufgerufen

Hier ist mein Code

import Cocoa 

let LEFT: UInt16 = 123 
let RIGHT: UInt16 = 124 
let DOWN: UInt16 = 125 
let UP: UInt16 = 126 

class GameViewController: NSViewController { 

... 

    override func keyDown(with event: NSEvent) { 
      print("abc") 
      switch event.keyCode { 
      case LEFT: 
       print("left") 
       break 
      case RIGHT: 
       print("right") 
       break 
      case DOWN: 
       print("down") 
       break 
      case UP: 
       print("up") 
       break 
      default: 
       print("other") 
       super.keyDown(with: event) 
       break 
      } 
      print("Key with number: \(event.keyCode) was pressed") 
     } 
} 

Ich habe versucht, alle mit den Pfeiltasten und andere Taste zu testen, ob meine Pfeiltasten ein Problem hatte, aber es ist nichts passiert - außer mir den Fehler Ton von macOS bekommen.

Ich weiß nicht, woher das Problem kommen könnte - ich bin Swift ziemlich neu, also kann es etwas ganz Offensichtliches sein, das ich nicht sehe. Weißt du, was ich falsch mache?

Vielen Dank im Voraus

+0

Ihre Klasse muss Teil der Responder-Kette sein. Sie werden wahrscheinlich finden, was Sie in [Cocoa Event Handling Guide] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html) benötigen. – Jerry

Antwort

2

Ich stelle fest, dass Sie die keyDown Methode im Code Ihrer View-Controller implementiert haben. Das ist eigentlich der falsche Ort - diese Methode sollte innerhalb des Codes der Ansicht gehen, nicht der View-Controller. Wenn Sie derzeit keine benutzerdefinierte Ansicht verwenden (mit Code, den Sie ändern können), sollten Sie eine neue Unterklasse erstellen.

+0

@Luigi Brauchen Sie Hilfe beim Einrichten? – Bob

Verwandte Themen