1

MVCの概念を理解しています。少なくとも私はそうすることを望んでいますが、私が最近遭遇した特定の状況があり、私は実際にはわからないと思います。

問題: 既存のボタンに適用すると、そのボタンのタイトルを編集する機能を追加するクラスを作成しようとしています。これは、UITextFieldを動的に生成することで実現され、UITextFieldにはボタンの新しい名前が入力されます。CustomAnimationというクラスにUITextFieldを追加し、次の方法で初期化するロジックを保持しています。

CustomAnimation *yar = [[CustomAnimation alloc] initWithButton:customButton];

私が遭遇する問題は、CustomAnimationなどのカスタムクラスからUIButtonを動的に作成し、それにターゲット/アクションを割り当てようとしている場合です。UIButtonは実際にはCustomAnimationクラスからViewController内で生成されるため、前者は親ViewControllerへのポインターを取得し、それをターゲットとして設定する必要があります。

[classButton addTarget:viewController action:@selector(dostuff:) forControlEvents:UIControlEventTouchUpInside];

1つを除いて、すべてが良好です。dostuffメソッドは、そのボタンに表示されるようにViewController内に存在する必要があり、ここではすべてがハックに変わります。

コントローラではなくクラス内から一時的なUI要素を生成する場合の正しいアプローチは何ですか?

ありがとうございました

4

1 に答える 1

1

粒度の観点からMVCを見る方法はたくさんあります。私があなたの質問を正しく理解している場合、あなたはMVCを単一の制御レベルで実装しようとしています。私は、コントローラーがビューやウィンドウなどのUIコントロールのチャンクを管理する、より大まかなアプローチを目指しています。

ボタンラベルの編集可能性は、ボタンに属する(それによってカプセル化された)動作であると主張することができます。したがって、その実装は、ボタンの全体的な実装の一部であるか、その一部である必要があります。これを受け入れたら、これをUIButtonのサブクラスとして実装し、CustomAnimationにあるコードをUIButtonのサブクラスに移動できます。または、CustomAnimationをUIButtonのサブクラスにカプセル化します。どちらか適切な方です。

于 2012-07-15T22:49:19.553 に答える