将所有TextField委托添加到UIView的简单方法?

时间:2014-08-07 18:52:21

标签: ios objective-c delegates

而不是手动将每个TextField委托添加到UIView,如下所示:

self.txtName.delegate = self;
self.txtAge.delegate = self;

是否有更快捷的方法将所有TextField委托添加到UIView?

或者,有没有办法可以获得刚刚获得焦点的TextField的位置,而不使用UITextFieldDelegate?

3 个答案:

答案 0 :(得分:3)

创建出口集合

@property(nonatomic, strong) IBOutletCollection(UITextField) NSArray *textFields;

然后遍历textFields

for(UITextField *aTextField in self.textFields)
{
    aTextField.delegate = self;
}

NSHipster

上有关于IBOutlets的好文章

答案 1 :(得分:1)

for (UIView *aView in self.view.subviews) {

    if ([aView isKindOfClass:[UITextField class]]) {

        ((UITextField *)aView).delegate = self;
    }
}

答案 2 :(得分:0)

  

«两个或两个以上:使用一个» - Edsger W. Dijkstra

[@[self.txtNames, self.txtAge] enumerateObjectsUsingBlock:^(UITextField *tf, NSUInteger idx, BOOL *stop){
    tf.delegate = self;
}];

好的:不是。但是原则相同。


如果要使用for,可以使用快速枚举而不是基于块的枚举。

for (UITextField *tf in @[self.txtNames, self.txtAge]) {
    tf.delegate = self;
}