我有一个CustomView
UIView
类代表我的screenUI
,我在其中以编程方式创建和定位UI元素,其中包括多个UITextField和一个UITableView。
我还有一个UIViewController
并且在它的loadView中我将我的CustomView分配给self.view。
我这样做是为了最好地保持视图和控制器的凝聚力。
我的问题是如何将CustomView中UITextFields
和UITableView
的代理设置为管理UIViewController
?
我的理解是UITextFieldDelegate
和所有其他协议方法应该在Controller中而不是View中实现,但我想避免在视图控制器中设置项目的委托(例如{{ 1}}在textField1.delegate = self
类而不是UIViewController
中将UIViewController设置为textField1.delegate = <value
类中的委托&gt;以保持我的代码更清晰。
谢谢。
答案 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;
}