私はいくつかのNSTextFieldを含むCocoaアプリケーションを作成しています。テキストフィールドのテキストの変更をモデルレイヤーに伝播しようとしていますが、モデルが更新されたときに元に戻すアクションを登録しているので、これは単にcontrolTextDidChange:
をリッスンするよりも少し複雑です。NSTextFieldは融合を編集します
デリゲートメソッドcontrolTextDidChange:
にフックすると、押されたキーごとに1回呼び出されます。モデルを更新すると、モデルは別々のキー押しを個別の元に戻すイベントとして扱います。これは望ましくない。デフォルトの「入力を元に戻す」アクションが「元に戻す」マネージャーに登録されているときに通知を受けるので、モデルを更新できます。 NSTextFieldは、入力を一時停止するとそのようなイベントを登録します(そして1つだけ)。残念ながら、私はこれがいつ起こるか分かりません。
私はcontrolTextDidEndEditing:
をリッスンして、そのデリゲートメソッドでモデルを更新しようとしましたが、モデルが更新される前にテキストフィールドから明示的にタブを外す必要があります。私のモデルオブジェクトを私のNSDocument
サブクラスに直接アーカイブするので、これを行うと、テキストフィールドの内容を変更した後にドキュメントを保存するとデータが失われますが、最初にテキストフィールドからタブアウトしません。モデルは時間内に更新されていないだろう。したがって、この手法は動作しません。
また、テキストフィールドのフィールドエディタ(control:textShouldBeginEditing:
の間)にフックしてtextDidEndEditing:
を聞いてみましたが、これは単に起動しないことがわかりましたので、モデルは更新されず、前の段落で述べた。誰も私がこれを理解するのを助けることができますか?ありがとう!
「NSEditor」プロトコルを見てください。 – Willeke
私は 'NSEditor'を見ましたが、バインディングを使用していないので(私のモデルアーキテクチャと互換性がないため)、私はView Controllerをワイヤリングする方法がわかりません(モデルを更新する責任があります)それはメッセージを受信します。 – wjk