Скажем, у меня есть следующий код:
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
.
Надеюсь, что это поможет.