2013-06-26 4 views
0

У меня есть один UITextField, и я перетаскиваю его от своего владельца, чтобы установить delegate в раскадровке.Почему методы делегата работают без объявления соответствия протокола?

И в моем файле controller.h я не объявлял класс как соответствующий протоколу UITextFieldDelegate.

Но - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string работает! Это просто работает!

И интересно, почему?

Я встречался с этим раньше, когда устанавливаю UITableView контроллеру, который не имеет UITableViewDelegate и UITableViewDataSource.

+0

Это происходит, когда вы даете соединение между владельцем файла и инструментами подключения. поэтому метод делегирования начнет работу – bhanu

+0

проверьте ваш xib-файл. может быть делегированным, связанным с владельцем файла – manujmv

+0

OP не спрашивает об установке 'textField.delegate = self'. Он спрашивает, почему делегация работает, не декларируя ** соответствие ** протоколу UITextFieldDelegate' **. Просто он использует неправильную терминологию. –

ответ

2

Методы вызываются, потому что делегирующие объекты (UIWebView, UITextField, UITableView и т. Д.) Не проверяют, соответствует ли делегат протоколу. Их интересует только если фактически отвечает на определенный метод делегата.

Протокольные объявления, в конце концов, являются лишь подсказками для компилятора.