以编程方式将所有UITextField和UITextView的委托设置为self

时间:2012-01-22 16:40:00

标签: iphone objective-c ios cocoa-touch ipad

我在-(void) viewDidLoad中有这段代码:

for(UIView *subview in self.view.subviews)
{
    if([subview isKindOfClass: [UITextView class]] || [subview isKindOfClass: [UITextField class]])
    {
        // error: property 'delegate' not found on object of type 'UIView *'
        subview.delegate = (id) self;
    }
}

但是它会收到错误,可以在上面代码的注释中看到。

我知道UIView没有delegate属性,但我知道UIView是UITextField或UITextView,并且这两个属性都有委托属性。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

您可以将当前的UIView转换为文本视图或文本字段

将支票拆分为两个,以便知道要将支票转换为什么类型。另一种方法是查看对象是否响应选择器setDelegate,如果是,则将setDelegate消息发送给它。

这样的事情:

for(UIView *subview in self.view.subviews)
{
    if([subview isKindOfClass: [UITextView class]])
    {
        ((UITextView*)subview).delegate = (id) self;
    }

    if([subview isKindOfClass: [UITextField class]])
    {
        ((UITextField*)subview).delegate = (id) self;
    }
}

或......

if ([subview respondsToSelector:@selector(setDelegate)])
{
    [subview performSelector:@selector(setDelegate:) withObject:self];
}

对于最后一个,它的代码较少,但您需要确保为放在视图中的所有UIView对象实现所有委托回调。