2016-12-25 8 views
1

Swift 3では、ユーザが矢印キーを押すたびにアクションを実行する必要がある簡単なプログラムを作成しようとしています。少しの研究の後で、私は使用する必要がある方法がkeyDown(with event: NSEvent)であることを発見しました。私がキーを押すたびに呼び出されるのではないという問題があります。Swift 3(macOS):keyDown(イベント:NSEvent)は呼び出されません

は、ここに私のコード

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") 
     } 
} 

私は矢印キーに問題があったかどうかをテストするために、すべての矢印キー、および他のキーを押すと試みたが、何も起こらなかったのです - 私はMacOSからのエラー音を得ることを除いて。

私は問題がどこから来るのか分かりません。私はSwiftの方が新しいので、私が見ていないことはかなり明白かもしれません。あなたは私が間違っていることを知っていますか?事前

+0

あなたのクラスはレスポンダチェーンの一部でなければなりません。おそらく、[Cocoa Event Handling Guide](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html)で必要なものを見つけることができます。 – Jerry

答えて

2

多くのおかげで私はあなたのビューコントローラのコードでkeyDownメソッドを実装しましたことに気づきます。これは実際には間違った場所です。つまり、そのメソッドは、ビューのコード内にあり、ビューコントローラではありません。現在カスタムビューを使用していない場合(変更可能なコードを使用)、新しいサブクラスを作成する必要があります。

+0

@Luigiこれを設定する助けが必要ですか? – Bob

関連する問題