0

ビューでユーザー入力を受け取り、それをそのビューのコントローラーに転送する適切な方法は何ですか? NotificationCenter が 1 つのオプションであることは知っていますが、ビューからそのコントローラーにデータを転送するためのよりエレガントな方法は確かにありますか?

すべての助けに大歓迎です。私はいつでも答えを受け入れます!

4

5 に答える 5

2

デリゲート プロトコル デザイン パターン、またはサブクラス化によるターゲット アクションを使用しますUIControlUIButtonaが押されたことをView Controllerに伝える方法を考えてみてください。インターフェイス ビルダーでは、アクション (セレクターのようなもの)touchUpInside:をターゲット (それを所有するビュー コントローラー) に接続します。非 IB では、UIButtonどのセレクターとどのターゲットを使用するかを直接伝えます。

どちらの方法も、さまざまな場合に意味があります。たとえば、UITextFieldの場合、委譲を使用する方が理にかなっています。テキスト フィールドは、ユーザーが編集を開始したとき、編集を終了したとき、または文字を入力したときのイベントなど、任意の数のイベントを送信できるからです。

ボタンの場合、さまざまな形式で表現されるイベントが実際には 1 つしかないため、target-action を使用する方が理にかなっています。

スワイプやドラッグ、その他のジェスチャには、UIGestureRecognizers を使用します。

于 2012-06-07T23:21:22.947 に答える
1

コントローラーが自身をビューのデリゲートとして設定するdelegationを探しています。UITableViewDelegate からわかります。

于 2012-06-07T23:21:36.020 に答える
1

Delegationまたはを探していますData Source。詳細については、委任とデータ ソースを参照してください。

これの簡単な例は、次のようなものです。

  //MyViewSubclass.h

  @protocol MyViewSubclassDelegate
  //Implement your delegate methods here.
  -(void)didTouchView; 
  @end

  @interface MyViewSubclass {

     id<MyViewSubclassDelegate>delegate;
  }
  @property(nonatomic,assign)id<MyViewSubclassDelegate>delegate;

もちろん、@synthesizeあなたdelegateMyViewSubclass.m

デリゲートを作成するクラスのヘッダーでMyViewSubclass、「MyViewSubclassDelegate プロトコル」に準拠する必要があります。

 #import "MyViewSubclass.h"
 @interface MyViewController : UIViewController <MyViewSubclassDelegate>

@implementationofで、 のメソッドをMyViewController.実装します。MyViewSubclassDelegate-(void)didTouchView

MyViewSubclassオブジェクトを初期化して作成するときMyViewControllerは、デリゲートとして設定します。

myViewSubclass.delegate = self // Self being MyViewController.

で、MyViewSubclass情報を転送する準備ができたとき、または単にメソッドを起動したいとき[self.delegate didTouchView]

お役に立てれば !

于 2012-06-07T23:24:11.347 に答える
0

ビューをサブクラスにUIControlして、ターゲット/アクション デザイン パターンを実装 sendActionsForControlEvents:します。メソッドを使用してコントローラーにメッセージを送信します。

于 2012-06-07T23:24:47.707 に答える
0

多くの場合、UIKit オブジェクトUITextFieldには、ビジネス ロジックを実行するために実装できるデリゲート メソッドがあります。たとえば、UITextField には- textFieldDidEndEditing:、ユーザーがキーボードを閉じた後に呼び出されるデリゲート メソッドがあります。

于 2012-06-07T23:25:19.177 に答える