override textFieldShouldEndEditing при нажатии кнопки отмены

У меня есть подробное представление с несколькими полями, некоторые из которых используют textFieldShouldEndEditing для выполнения некоторой проверки. Все это хорошо работает. Однако, если пользователь вводит неверные данные в поле и затем нажимает кнопку отмены, процедура проверки по-прежнему выполняется с вызовом textFieldShouldEndEditing. Есть ли способ предотвратить это? Другими словами, просто получите чистое отмена, поскольку мне не важно, что содержит поле.

2 Solutions collect form web for “override textFieldShouldEndEditing при нажатии кнопки отмены”

внутри функции кнопки отмены очистить текущее текстовое поле .text = @ "";

сначала проверить текстFieldShouldEndEditing

if ([textfield.text isEqualtoEmpty:@""] { return Yes; } else{ // check your condition here } 

Ответ Сентикумара работает в этом конкретном случае, но у меня был аналогичный случай, когда мне нужно было проверить, что поле тоже не пустое …

Поэтому я использовал следующую технику:

  1. Я создал свойство BOOL под названием "cancelButtonPressed"
  2. В методе, связанном с кнопкой отмены, я установил для этого BOOL значение YES
  3. В textViewShouldEndEditing я сначала проверяю этот BOOL. Если это НЕТ, я делаю свои элементы управления (включая, например, предупреждения). Этот метод всегда должен заканчиваться вызовом return YES; , что означает, что если этот «cancelButtonPressed» BOOL был «YES», он должен закончить редактирование текстового поля (а не бросить предупреждение на моем лице, например).

Кроме того (это напрямую не связано с вопросом, но обычно оно имеет функцию «отменить»), вы также можете иметь кнопку « сохранить », и в этом случае вы хотите запретить пользователю сохранять, если вы редактируете textField и запись неверны.
В этом случае я создаю еще один BOOL с именем «textFieldInError» и устанавливаю его в YES, если мои элементы управления в textViewShouldEndEditing терпят неудачу, и НЕТ, если мои элементы управления преуспевают (в конце метода). Затем, в методе, связанном с моей кнопкой сохранения, я проверяю, что этот BOOL НЕТ.

Вот полный код:

  @property (nonatomic) BOOL cancelButtonPressed; @property (nonatomic) BOOL textFieldInError; - (BOOL)textFieldShouldEndEditing:(UITextField *)textField { // If the user pressed Cancel, then return without checking the content of the textfield if (!self.cancelButtonPressed) { // Do your controls here if (check fails) { UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Incorrect entry" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [av show]; // Prevent from saving self.textFieldInError = YES; return NO; } } // Allow saving self.textFieldInError = NO; return YES; } 

Сохранить и отменить методы:

 - (void)saveButtonPressed; { // Resign first responder, which removes the decimal keypad [self.view endEditing:YES]; // The current edited textField must not be in error if (!self.textFieldInError) { // Do what you have to do when saving } } - (void)cancel; { self.cancelButtonPressed = YES; [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; } 

Я надеюсь, что это может помочь другим людям, потому что у меня была большая головная боль, решающая это чистым, простым способом.

Фред

  • UITextField Text Invisible до редактирования
  • Как установить inputDelegate для UITextField?
  • Как настроить фокус на текстовое поле в iphone?
  • Курсор не отображается при вызове функции startFirstResponder
  • Использование одинаковых методов UITextFieldDelegate в пользовательских UIView и UIViewController одновременно
  • Отключение пользовательского ввода для UITextfield в быстром
  • UIStepper проглатывает прикосновение
  • Как мне получить TextField
  • Включить UIAlertAction из UIAlertController только после ввода
  • Как установить расстояние между буквами UITextField
  • как удалить или очистить UITextField
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.