Есть ли способ скрыть клавиатуру, когда нажата кнопка очистки UITextField
?
Скрытие клавиатуры при нажатии кнопки очистки в UITextField
Ответ 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;
}
Ответ 3
Угу. Вызовите resignFirstResponder
в текстовом поле в делегате textFieldShouldClear:
.
Ответ 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];