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

IPhone: Можно ли убрать клавиатуру с кнопкой очистки UITextField?

Мне интересно, есть ли способ, чтобы кнопка очистки UITextField "всегда была видимой"

textfield.clearButtonMode = UITextFieldViewModeAlways;

похоже, не работает .. и если можно отменить клавиатуру с помощью кнопки?

Спасибо заранее.

4b9b3361

Ответ 1

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

Решение довольно простое. Просто очистите поле самостоятельно, resignFirstResponder и верните NO

    -(BOOL)textFieldShouldClear:(UITextField *)textField
    {
        textField.text = @"";
        [textField resignFirstResponder];

        return NO;
    }

Ответ 2

В вашем делегате функция

- (BOOL)textFieldShouldClear:(UITextField *)textField

вызывается, когда пользователи хотят очистить текстовое поле. Если вы вернете ДА и вызовите

[textField resignFirstResponder];

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

изменить Чтобы убедиться, что вы действительно уходите в отставку, попробуйте сделать это чуть позже:

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

Ответ 3

Задержка для меня не работала. Вместо этого я добавил делегата переменную экземпляра:

BOOL cancelEdit;

Затем в реализации делегата:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if (cancelEdit) {
        cancelEdit = NO;

        return NO;
    } else {
        return YES;
    }
}

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
    cancelEdit = YES;

    return YES;
}

Ответ 5

Я обнаружил, что это странное поведение было вызвано конкурирующим распознавателем жестов, который подал в отставку первого ответчика перед клавиатурой перед вызовом textFieldShouldClear:. Это, казалось, искажало первого ответчика.

Если вы настроили его таким образом, убедитесь, что для cancelsTouchesInView вашего распознавателя жестов установлено значение YES. Таким образом вам не нужно делать ничего особенного в методах textFieldShouldClear: или textFieldShouldBeginEditing: delegate.