NSViewController がキーとマウスのイベントを受け入れるようにする方法を理解し、情報を見つけるのに苦労しています。これらのイベントを NSViewController に登録するには、レスポンダーチェーンに追加する必要があることをどこかで読みましたが、これを適切に行う方法がわかりません。
どんな種類の助けも大歓迎です!
NSViewController がキーとマウスのイベントを受け入れるようにする方法を理解し、情報を見つけるのに苦労しています。これらのイベントを NSViewController に登録するには、レスポンダーチェーンに追加する必要があることをどこかで読みましたが、これを適切に行う方法がわかりません。
どんな種類の助けも大歓迎です!
CocoaWithLove.comに素敵なチュートリアルがあります。
要約すると、NSView のサブクラス ("EugeneView" など) を作成すると、そのサブクラスに " setNextResponder
" や " "などの追加のメソッドが含まれsetViewController
ます。そして、これら 2 つのメソッドを実行すると、NSViewController がレスポンダー チェーンに統合されます。
デバッグ中。NSViewControllerview
が最初の応答者を受け入れないことに気付きました。
印刷で確認できますprint(viewController.view) //false
NSViewController をレスポンダー チェーンに追加するには、そのビューをacceptFirstReponder
. これは、NSView の拡張機能を作成し、その拡張機能をオーバーライドすることで簡単に実行できます。acceptFirstResponder
extension NSView{
//making view acceptFirstResponder by default,
//this will enable NSViewController receive responder event dispatched into responder chain
open override var acceptsFirstResponder: Bool{return true}
}
これにより、コントローラーがレスポンダー チェーンに追加され、すべてのレスポンダー イベントを受け取ります。
私は Cocoa を初めて使用するので、私の説明はあまり正確ではないかもしれません。しかし、ソリューションは完全にうまく機能します。
ViewController がonKeyDown
イベントを受信しないという問題を解決するためにこれを行いました。