Получение значения UITextField при нажатии клавиш? - PullRequest
107 голосов
/ 23 декабря 2008

Допустим, у меня есть следующий код:

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

Я бы хотел, чтобы greetingLabel прочитал «Hello [nameTextField]», как только пользователь нажмет любую клавишу.

Что мне в основном нужно, это iPhone-эквивалент метода делегата Какао controlTextDidChange.

Метод делегата textField:shouldChangeCharactersInRange: вызывается при каждом нажатии клавиши:

- (BOOL)              textField:(UITextField *)textField
  shouldChangeCharactersInRange:(NSRange)range     
              replacementString:(NSString *)string

Строковый аргумент возвращает нажатый символ. Однако фактическое значение textField (nameTextField.text) остается пустым.

Что мне здесь не хватает? (Я бы хотел, чтобы nameTextField отражал точную строку, которую пользователь ввел до сих пор).

Ответы [ 3 ]

195 голосов
/ 23 декабря 2008

Оказывается, самый простой способ сделать это - использовать Interface Builder:

  • Добавить IBAction (скажем, в ViewController, как в этом случае)
  • Ctrl-щелчок (или щелчок правой кнопкой мыши) по UITextField в Интерфейсном Разработчике
  • Подключите событие «Редактирование изменено» к IBAction владельца файла, добавленному на первом шаге.

Работает как обаяние :) (Не могу поверить, что потратил на это много дней, и теперь понимаю, что решение оказалось намного проще, чем я думал: P)

101 голосов
/ 23 декабря 2008

вы можете зарегистрировать действие для события UIControlEventEditingChanges в текстовом поле:

[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];

...

// TODO: error checking

- (void)updateLabelUsingContentsOfTextField:(id)sender {

    greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text];

}
10 голосов
/ 23 декабря 2008

UITextField имеет уведомление UITextFieldTextDidChange, которое будет запускаться при каждом изменении текста, если вы зарегистрируетесь для него. Просто зарегистрируйтесь для этого уведомления и в методе, вызванном уведомлением, измените текст метки.

Чтобы добавить к этому, объект, переданный вашему обработчику уведомлений, будет иметь текст UITextField.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...