1

複数のUITextFieldとUITableViewを含むUI要素をプログラムで作成して配置する、自分を表すCustomView UIViewクラスがあります。screenUIまたUIViewController、CustomView を self.view に割り当てる loadView もあります。

これは、ビューとコントローラーの結合を最適に保つために行います。

私の質問は、CustomView 内のデリゲートを管理UITextFieldsに設定するにはどうすればよいですか?UITableViewUIViewController

および他のすべてのプロトコルメソッドはビューではなくコントローラーに実装する必要があることを理解していUITextFieldDelegateますが、ビューコントローラーでアイテムのデリゲートを設定することは避けたいと思います(たとえばtextField1.delegate = self、UIViewController をデリゲートとして設定UIViewControllerするのではなく、クラスで)textField1.delegate = <value> 私のCustomViewクラスで) 私のコードをきれいに保つために。

ありがとうございます。

4

2 に答える 2

1

delegateカスタム ビューにプロパティを設定できます。

customView.delegate = self;
self.view = customView;

委任セッターでは、責任を転送できます。

-(void) setDelegate:(id<*the protocols you need*>) del
{
     _textField.delegate = del;
     ...
}

必要に応じて、カスタム ビューに複数の種類のデリゲートを設定できますが、通常はすべてのプロトコルを実装する 1 つで十分です。

于 2013-01-14T15:07:23.790 に答える
0

私はおそらくそれらを一緒に転送するでしょう。カスタム ビューでデリゲートを表すプロパティを作成します。次に、loadView でそれらを自分自身に設定します。

// CustomView.h
@property (nonatomic, weak) id <UITextFieldDelegate> textFieldDelegate;
@property (nonatomic, weak) id <UITableViewDatasource> tableViewDataSource;
@property (nonatomic, weak) id <UITableViewDelegate> tableViewDelegate;

// Create textField
textField.delegate = self.textFieldDelegate;

// in ViewController
- (void)loadView
{
    CustomView *view = //...
    view.textFieldDelegate = self;
}
于 2013-01-14T14:53:20.270 に答える