Должен ли я устанавливать делегата для каждого UITextField?

#iphone #delegates #uitextfield

#iPhone #делегаты #uitextfield

Вопрос:

Я пытаюсь выяснить, как заставить методы UITextFieldDelegate вызываться для моего UITextField. Вот некоторый код, который я использовал для создания контроллера и текстового поля:

 @interface FirstViewController : UIViewController <UITextFieldDelegate> {
    UITextField *fieldNumeroAppoggi;
}
@property (nonatomic,strong) UITextField *fieldNumeroArgomenti;

fieldNumeroAppoggi = [[UITextField alloc] initWithFrame:CGRectMake(210, 40, 50, 20)];
fieldNumeroAppoggi.borderStyle = UITextBorderStyleRoundedRect;
fieldNumeroAppoggi.tag = 1;
[self.dettagli addSubview:fieldNumeroAppoggi];
  

В моем контроллере, если я реализую метод делегирования

 - (BOOL) textFieldShouldReturn:(UITextField *)textField{

    [textField resignFirstResponder];

    return YES;
}
  

он никогда не вызывается. Однако, если я установлю fieldNumeroAppoggi.delegate = self; , все будет работать нормально. Если я создаю другие UITextField объекты, должен ли я устанавливать делегат для каждого из них?

Комментарии:

1. Я не уверен, что полностью понимаю ваш вопрос, но если вы спрашиваете, могут ли несколько экземпляров UITextField совместно использовать одного делегата (в данном случае self), то ответ — да.

Ответ №1:

Предполагая, что я вас понимаю … да, объект может быть делегатом для нескольких элементов управления. Если вам нужно выполнять разные действия в зависимости от того, какой элемент управления отправил сообщение, вы обрабатываете это в обработчике делегирования. Вы можете либо сравнить отправителя с конкретным объектом, либо использовать tag свойство для идентификации конкретных экземпляров.

Пример:

 - (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    BOOL shouldReturn = YES;

    if (textField == fieldNumeroAppoggi) {
        // do something
    }
    else if (textField == aDifferentTextField) {
        // do something different
        // maybe this one shouldn't return
        shouldReturn = NO;
    }

    return shouldReturn;
}
  

Комментарии:

1. мммм, я спрашиваю, есть ли у меня более одного текстового поля, для использования метода делегирования я должен установить fieldNumeroAppoggi.delegate = self; и aDifferentTextField. делегат = self;?? большое вам спасибо