私は最初のCocoaアプリケーションを書いています。シンプルなユーティリティアプリ、つまり電卓です。すべてが機能しています。最後に追加したいのは、キーを押したイベントにアプリが応答するようにすることです。したがって、マウスで「4」ボタンをクリックするか、キーボードの「4」キーを押すだけです。私はすべてのイベント処理ドキュメントを読んでいますが、イベントを処理するNSResponder(またはNSView)を取得するための推奨されるアプローチを理解していません。
NSWindowのサブクラスを作成し、そのタイプのメインウィンドウを作成するようにInterfaceBuilderに指示することができます。次に、新しいNSWindowサブクラスでkeyDownメッセージをオーバーライドすると、イベントが取得されますが、アプリケーションデリゲートクラスに接続する方法がわかりません(基本的に、押されたキーをオンにして、対応するメッセージを呼び出すだけなので)ボタン「選択」アクションが対象とするデリゲート内。
または、アプリケーションデリゲートクラスのスーパークラスをNSObjectからNSView、またはNSResponderなどに変更することでこれを行うことについて何か聞いたと思います。私はその考えをあまり考えていませんが、実際にアプリケーションデリゲートオブジェクトを取得して、実際にファーストレスポンダーとして設定する方法がわかりません(それが私がやりたいことだと思います)。
したがって、誰かがkeyDownメソッドを実装する方法/場所について具体的な指示をくれることを望んでいますが、これを行うための推奨される「ベストプラクティス」も理解したいと思います。これを行うための正しいアーキテクチャはAppleが何と言うでしょうか?私は、この機能を実現する方法を学ぶことと、その背後にあるAppleのデザインパターンを学ぶことに非常に興味があります。
プログラムの構造は次のとおりです。1つのnibファイル(実際には.xib)があり、表示用のテキストボックスといくつかのボタンを使用してウィンドウを設計しました。そこからAppDelegateクラス(標準のプロジェクトテンプレートで設定されたもの)にアウトレットとアクションを登録しました。MVCパターンに従って、AppDelegateが初期化するCalculatorクラスがあり、計算機の実際のロジックはすべてそのクラスにあります。AppDelegateは基本的に、ボタンからのメッセージに応答し、それらをCalculatorクラスのメソッドに渡し、Calculatorに現在の表示値を要求し、それをテキストボックスに更新します。つまり、私のnibファイルのグラフィック要素は「ビュー」であり、AppDelegateは「コントローラー」であり、Calculatorクラスは「モデル」です。右?
では、keyDownイベントを処理するのは誰ですか?ビューがそれらをキャプチャしてコントローラに送信する必要があるようですが、どのように設定すればよいですか?
関連する可能性のある質問は、「ウィンドウコントローラー」クラスと「ビューコントローラー」クラスについての言及を見たことがあると思います。それらのクラスのポイントが何であるか理解できません。私のシンプルなアプリにはそれらがありますか?それが必要ですか?