Подтвердить что ты не робот

Скрытие клавиатуры при нажатии кнопки очистки в UITextField

Есть ли способ скрыть клавиатуру, когда нажата кнопка очистки UITextField?

4b9b3361

Ответ 1

Да, есть, хотя я подозреваю, что это нарушит Руководство Apple по интерфейсам пользователя.

Для этого добавьте следующий способ в файл реализации контроллера просмотра. Затем сделайте контроллер вида в своем делегате текстового поля.

- (BOOL) textFieldShouldClear:(UITextField *)textField{
    [textField resignFirstResponder];   
    return YES;
}

Недостатком этого подхода является то, что если вы хотите предотвратить очистку текстового поля, ваш код становится беспорядочным. Вместо этого вы можете попытаться определить настраиваемый метод, а затем подключить его к методу valueDidChange и проверить пустое значение.

-(IBAction)hideKeyboardFromTextField:(id)sender{
  //TODO: Check if the previous value was longer than one character to differentiate
  //between backspace and clear. 

  //check if the editing caused the box to be empty
  if([[sender value] isEqualToString:@""] || [sender value] == nil)
    [sender resignFirstResponder];
  }
}

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

Как я уже сказал в начале моего ответа, это не рекомендуется в первую очередь, и, как показали ответы здесь, это не так просто реализовать. Я не думаю, что это стоит хлопот, учитывая сложность и тот факт, что это не приводит к оптимальному опыту пользователя.

Ответ 2

Этот код определенно работает для меня, чтобы скрыть клавиатуру при очистке содержимого текстового поля.

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
    textField.text = @"";
    return NO;
}

Ответ 4

В UITextFieldDelegate

- (BOOL)textFieldShouldClear:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

Но есть проблема с этим. Из руководства: "Текстовое поле вызывает этот метод в ответ на нажатие кнопки со встроенной кнопкой очистки (эта кнопка не отображается по умолчанию, но ее можно включить, изменив значение в свойстве clearButtonMode текстового поля). Этот метод также вызывается при начале редактирования и для свойства clearsOnBeginEditing текстового поля установлено значение YES."

Обратите внимание, что этот метод вызывается, когда редактирование начинается, если для параметра cleararsOnBeginEditing установлено значение YES. Поэтому, если вы вызовеете resignFirstResponder в этом методе, редактирование не начнется на самом деле. Поэтому вам нужно установить clearsOnBeginEditing в НЕТ. Очевидно, что после начала редактирования текстовое поле не будет очищено.

Другой ВАЖНЫЙ вопрос не имеет прямого отношения к вопросу. Скрытие клавиатуры после нажатия кнопки очистки не является привычным поведением, и Apple не любит изменять поведение стандартных элементов. Вы можете получить отказ от этого.

Ответ 5

Попробуйте этот код:

[TextField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1];