1

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

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

我的问题是如何将 CustomView 内的 and 的委托设置为管理UITextFields的?UITableViewUIViewController

我的理解是UITextFieldDelegate所有其他协议方法应该在控制器而不是视图中实现,但我想避免在视图控制器中设置项目的委托(例如textField1.delegate = self,在UIViewController类中而不是textField1.delegate = <value将 UIViewController 设置为委托> 在我的CustomView课堂上)以保持我的代码更干净。

谢谢。

4

2 回答 2

1

您可以delegate在自定义视图上有一个属性:

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

在委托设置器中,您可以转发职责:

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

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

于 2013-01-14T15:07:23.790 回答
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;
}
于 2013-01-14T14:53:20.270 回答