iPhone: можно отменить клавиатуру кнопкой очистки UITextField? - PullRequest
12 голосов
/ 06 августа 2010

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

textfield.clearButtonMode = UITextFieldViewModeAlways;

не похоже на работу .. а можно ли уволить клавиатуру кнопкой?

Заранее спасибо.

Ответы [ 5 ]

37 голосов
/ 02 декабря 2012

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

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

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

        return NO;
    }
9 голосов
/ 06 августа 2010

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

- (BOOL)textFieldShouldClear:(UITextField *)textField

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

[textField resignFirstResponder];

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

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

[textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1];
5 голосов
/ 25 апреля 2011

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

BOOL cancelEdit;

Тогда в реализации делегата:

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

        return NO;
    } else {
        return YES;
    }
}

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

    return YES;
}
0 голосов
/ 07 апреля 2014

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

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

0 голосов
/ 06 августа 2010

UITextFieldDelegate textFieldShouldClear

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

http://developer.apple.com/iphone/library/documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html#//apple_ref/occ/intfm/UITextFieldDelegate/textFieldShouldClear:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...