我在-(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,并且这两个属性都有委托属性。
我该如何解决这个问题?
答案 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对象实现所有委托回调。