1

次のような(簡略化された)Cocoaビュー階層があります。

window
- contentView
-- view1
---> button1
--view2
---> textField1

重要なことに、button1&textField1は直接の superView を共有しません。

button1何か(正確には関係ありません)を実行するためにターゲットアクションを追加したいと思います(私が作成したカスタムテキストフィールドであるtextField1と考えてください)。textField1

textField1私の理解では、「ターゲットアクション」を追加できるように、ボタンには初期化時に参照が必要です。

私の質問は、より複雑な/深い/ネストされたビュー階層にスケーリングする方法で、button1 がこの参照を取得するための最良の方法は何ですか?

私はうまくいけば、もう少しエレガントなものを探しています:

let reference = self.superview.subview[0].subview[0] as NSView

Interface Builder を使用すると、右クリックしてボタンから textField にドラッグし、「接続」を作成できます。これには、ある種の内部 ID が使用されます。コードで行うのと似たようなことはありますか?

4

1 に答える 1

1

2 つのビューは、相互にまったく参照していません。それはうまくスケーリングしません。これは、常に UITextField への参照を持つ UITableView に似ています。

あなたのビューはただのものを表示するだけです。必要に応じて、コントローラー、またはより具体的にはモデルを介して対話できるようにするためのビューコントローラーが必要です。

これを行うには多くの方法がありますが、指針となる原則は、それらを分離することです。ボタンにはアクションがあります。そのアクションは、View Controller にターゲット メソッドを持つことができ、NSNotification を起動することができます... ViewController はこれを処理し、他のビューの textfield で何かを行います。

おそらく、ボタンがモデル内のデータを変更し、モデルへの変更をリッスンしてモデルを介してデータを表示するために、コントローラーを介してテキストフィールドが何らかの形で接続されています。

ビューに物を表示したままにしてください。ビューにモデルのものを入れないでください。コントローラがビューの通信を可能にする調整を管理できるようにします。

于 2014-12-10T10:48:19.607 に答える