2010-08-28 2 views
2

Мне интересно, как соответствовать классу UITextFieldDelegate, в прошлом я всегда добавлял его для обеспечения доступа к методам, определенным в протоколе. Однако в прошлый раз я забыл добавить его, только понимая позже, что он отсутствует. Мой вопрос, почему он работает с или без, я думал, что нужно правильно обращаться к методам протокола?С & Без UITextFieldDelegate?

@interface MyController : UIViewController <UITextFieldDelegate> { 
    UITextField *text_001; 
} 
@property(nonatomic, retain) IBOutlet UITextField *text_001; 
@end 

ИЛИ:

@interface MyController : UIViewController { 
    UITextField *text_001; 
} 
@property(nonatomic, retain) IBOutlet UITextField *text_001; 
@end 

С:

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    NSLog(@"Return: ... "); 
    [textField resignFirstResponder]; 
    return YES; 
} 

Приветствия Гэри

ответ

5

декларации делегатов действительно только там, как компилятор намеков; очевидно, вам все равно придется реализовать базовые методы. Однако основная цель - дать возможность компилятору дважды проверить вас при назначении. Если вы попытаетесь вручную (в коде, в отличие от IB), назначьте делегата, который не был объявлен как таковой, вы часто получите предупреждение компилятора.

Поскольку Objective-C использует утиную типизацию для большинства вещей (если он идет как утка и шарлатанцы, как утка, если он реагирует на -textFieldShouldReturn: и т. Д.), Вы довольно безопасны.

+0

спасибо, много оценено. – fuzzygoat

+0

Я не знаю этого! Спасибо @Ben Gottlieb. – jsicary

Смежные вопросы