将Custom UIView中的UITextField / UITableView的委托设置为管理ViewController

时间:2013-01-14 14:48:52

标签: ios uiview delegates

我有一个CustomView UIView类代表我的screenUI,我在其中以编程方式创建和定位UI元素,其中包括多个UITextField和一个UITableView。 我还有一个UIViewController并且在它的loadView中我将我的CustomView分配给self.view。

我这样做是为了最好地保持视图和控制器的凝聚力。

我的问题是如何将CustomView中UITextFieldsUITableView的代理设置为管理UIViewController

我的理解是UITextFieldDelegate和所有其他协议方法应该在Controller中而不是View中实现,但我想避免在视图控制器中设置项目的委托(例如{{ 1}}在textField1.delegate = self类而不是UIViewController中将UIViewController设置为textField1.delegate = <value类中的委托&gt;以保持我的代码更清晰。

谢谢。

2 个答案:

答案 0 :(得分:1)

您的自定义视图可以包含delegate属性:

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

在委托制定者中,您可以转发职责:

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

您的自定义视图可以有多种类型的委托,这取决于您的需求,但实现所有协议的人通常就足够了。

答案 1 :(得分:0)

我可能只是转发它们。创建表示自定义视图上的委托的属性。然后在loadView中将它们设置为self。

// 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;
}