Почему методы делегата работают без объявления соответствия протокола?
У меня есть такой UITextField
и перетаскиваю его к его владельцу, чтобы установить delegate
в раскадровке.
И в моем файле controller.h я не объявлял класс соответствующим UITextFieldDelegate
протокол.
Но - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
работает! Это просто работает!
И мне интересно, почему?
Я встречал это однажды, когда я установил UITableView на контроллер, который не имеет UITableViewDelegate
а также UITableViewDataSource
,
1 ответ
Методы вызываются, потому что делегирующие объекты (UIWebView
, UITextField
, UITableView
и т. д.) не проверяйте, соответствует ли делегат протоколу. Их интересует только то, отвечает ли он определенному методу делегата.
В конце концов, объявления протоколов являются лишь подсказками для компилятора.