Нужно ли устанавливать делегата для каждого UITextField? - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь выяснить, как сделать так, чтобы методы 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 Ответ

3 голосов
/ 10 ноября 2011

Если я вас понимаю ... да, объект может быть делегатом для нескольких элементов управления.Если вам нужно сделать разные вещи в зависимости от того, какой элемент управления отправил сообщение, вы обрабатываете это в обработчике делегата.Вы можете сравнить отправителя с конкретным объектом или использовать свойство 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;
}
...