Программно установить все делегаты UITextField и UITextView на себя - PullRequest
1 голос
/ 22 января 2012

У меня есть этот код в -(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 неУ меня нет свойства делегата, однако я знаю, что UIView - это либо UITextField, либо UITextView, и оба они имеют свойство делегата.

Как это исправить?

1 Ответ

4 голосов
/ 22 января 2012

Вы можете привести текущий 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, которые вы помещаете в ваше представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...