Мне интересно, есть ли способ, чтобы кнопка очистки UITextField "всегда была видимой"
textfield.clearButtonMode = UITextFieldViewModeAlways;
похоже, не работает .. и если можно отменить клавиатуру с помощью кнопки?
Спасибо заранее.
Мне интересно, есть ли способ, чтобы кнопка очистки UITextField "всегда была видимой"
textfield.clearButtonMode = UITextFieldViewModeAlways;
похоже, не работает .. и если можно отменить клавиатуру с помощью кнопки?
Спасибо заранее.
Как упоминалось ранее, кажется, что яблоко устанавливает фокус текстового поля после того, как вы очистите поле.
Решение довольно простое. Просто очистите поле самостоятельно, resignFirstResponder и верните NO
-(BOOL)textFieldShouldClear:(UITextField *)textField
{
textField.text = @"";
[textField resignFirstResponder];
return NO;
}
В вашем делегате функция
- (BOOL)textFieldShouldClear:(UITextField *)textField
вызывается, когда пользователи хотят очистить текстовое поле. Если вы вернете ДА и вызовите
[textField resignFirstResponder];
клавиатура должна уйти. Я не знаю о clearButtonMode, кроме того, что вы можете захотеть установить его раньше, предпочтительно, перед добавлением представления в его супервизор.
изменить Чтобы убедиться, что вы действительно уходите в отставку, попробуйте сделать это чуть позже:
[textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1];
Задержка для меня не работала. Вместо этого я добавил делегата переменную экземпляра:
BOOL cancelEdit;
Затем в реализации делегата:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (cancelEdit) {
cancelEdit = NO;
return NO;
} else {
return YES;
}
}
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
cancelEdit = YES;
return YES;
}
UITextFieldDelegate textFieldShouldClear
- (BOOL)textFieldShouldClear:(UITextField *)textField {
[textField] resignFirstResponder];
return YES;
Я обнаружил, что это странное поведение было вызвано конкурирующим распознавателем жестов, который подал в отставку первого ответчика перед клавиатурой перед вызовом textFieldShouldClear:. Это, казалось, искажало первого ответчика.
Если вы настроили его таким образом, убедитесь, что для cancelsTouchesInView вашего распознавателя жестов установлено значение YES. Таким образом вам не нужно делать ничего особенного в методах textFieldShouldClear: или textFieldShouldBeginEditing: delegate.