Как ввести значение UITextField в виде нажатия клавиш?

Скажем, у меня есть следующий код:

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

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

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

...

// TODO: error checking

- (void)updateLabelUsingContentsOfTextField:(id)sender {

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

}

Ответ 3

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

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

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