Как я могу обнаружить событие нажатия клавиши в UITextField?


В UITextView есть измененное событие для обработки нажатия клавиши. Однако у UITextField такого события нет.

Как я могу обнаружить событие нажатия клавиши в UITextField?

Существует метод, описанный здесь с использованием уведомлений, однако проблема заключается в том, что я не могу отписаться от TextFieldTextDidChangeNotification.

4 7

4 ответа:

Я не уверен, что это ваш вопрос. На первый вы, кажется, ответили сами, т. е. решение (из вашей ссылки) заключается в использовании NSNotificationCenter.DefaultCenter.AddObserver.

Второй - оотмене подписки - Если вы хотите прекратить наблюдение, вам следует вызвать предыдущий метод-аналог, т. е. NSNotificationCenter.DefaultCenter.RemoveObserver.

Просто сохраните объект, возвращенный из AddObserver, чтобы вы могли передать его в RemoveObserver.

Примечание: Если я не понял ваш вопрос правильно, пожалуйста, используйте edit и добавьте некоторые детали и / или код того, чего вы хотите достичь, и мы сделаем все возможное, чтобы помочь : -)

Как предложила колинта, сделайте это

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
  NSLog(@"range = %@, replacement = %@, text = %@", NSStringFromRange(range), string, text);
  return YES;
}

И

- (BOOL)textFieldShouldClear:(UITextField *)textField {
  NSLog(@"clear text");
  return YES;
}

Он также будет работать, если входные данные были изменены с помощью предложений по правописанию.

Посмотрите на UITextFieldDelegate

Http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html

Реализуйте этот протокол. Он имеет методы обратного вызова для всех изменений текстового поля.

Самый чистый способ наблюдать UITextField Изменения-это

_textField.AddTarget((sender, e) =>
{
    // Do your stuff in here
}, UIControlEvent.EditingChanged);

Вам не нужно подписываться на общесистемный Центр уведомлений, и вам не нужно отменять регистрацию observer, когда вы уничтожаете текстовое поле.

Надеюсь, что это поможет кому-то в будущем:)