Cocoaの新人として、私はジェネリックNSResponderサブクラスがキーイベントを実装しているように実装する理由を理解するのに苦労しています。なぜNSWindowまたはNSViewインスタンスはデリゲートではなく、独自のキーイベントを処理しますか?
私のプログラムでは、画面全体を占有するNSWindowサブクラスがあり、必ずキーイベントを処理する必要があります。プログラムの状態全体を変更することができるいくつかの主要なコマンドがあります(たとえば、ユーザーがスペースバーを押すとタイマーを一時停止するなど)。NSTextFieldハンドルのようなサブビューを持つのは意味がありません。
デリゲート(コントローラ)はこれらのイベントを取得する必要があります。代わりに、ウィンドウを(keyDown:
とinterpretKeyEvents:
セレクタを介して)コントローラに通知するために乱雑なグルーコードを書くか、コントローラのコードをNSWindowサブクラス自体に移動するだけで済むのです。
これは厄介で、私の腸は何かが欠けていると私に伝えます。よりクリーンなソリューションはありますか?
私の代理人は、実際にはNSWindowControllerサブクラスです。インタフェースビルダーを使用していないのは、インスタンス化時にボーダレスなウィンドウを作成しようとしているためで、IBがそのように見えない - さらに、詳細を学習しようとしているIBはたくさん隠れるので、このアプリでは "難しい方法"を学ぶ価値があると思った。 ドキュメントのそのセクションへのリンクありがとうございます。私はそれを読んだが、最後の手段であるNSWindowControllerに関する詳細を見逃した。明らかに私はレスポンダーチェーンを管理するのに間違いを犯しました。 – EricB