UITextField странное поведение на resignFirstResponder - PullRequest
0 голосов
/ 06 декабря 2011

Уже второй день и не могу разобраться в проблеме,

У меня UITabelView с пользовательским UICellViews, каждый пользовательский UICellView состоит из UILabel и UITextField.

Пользовательский UICellView объект выделяет UITextField и UILabel в его методе init и освобождается в dealloc.

Количество пользовательских UICellViews в UITableView равно 6.

Сценарий пользователя следующий

  • Когда пользователь нажимает от 1 до 5 UITextFields, открывается виртуальная клавиатура и пользователь набирает текст
  • Когда пользователь нажимает 6-ю UITextField, если виртуальная клавиатура активна, она должна быть скрыта, а если она скрыта, она не должна отображаться.

Как реализовать протокол UITextFieldDelegate в моем классе UIViewController и установить делегата каждого UITextField на себя.

Мои методы делегата следующие

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if (textField.tag != 6) {
        return YES;
    } else {
        [textField resignFirstResponder];
        return NO;
    }
}

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

-(void) textFieldDidBeginEditing:(UITextField *)textField {
     /* Some code */
}

-(void) textFieldDidEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
}

Все функции работают правильно!

Итак, теперь виртуальная клавиатура никогда не скрывается, почему это происходит?

PS. Аналогичный код работал на iPhone, но эта проблема существует на iPad.

Ответы [ 2 ]

5 голосов
/ 06 декабря 2011

Вам нужно знать, какое текстовое поле использовалось в последний раз!так что вы можете сделать [lastUsedTextField resignFirstResponder]

Это грязный, но рабочий трюк ... вы можете сделать ваше текстовое поле новым активным UITextField и немедленно вызвать resignFirstResponder в следующем цикле:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if (textField.tag != 6) {
        return YES;
    } else {
        // this will schedule keyboard dismissal for the current text field
        dispatch_async(dispatch_get_main_queue(), ^{
            [textField resignFirstResponder];
        });
        return YES; // -> make this one active
    }
}
0 голосов
/ 06 декабря 2011

вы установили действие для textField?

[YourTextField addTarget:self action:@selector(textFieldDoneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit];

PS установить любой селектор для любого ControlEvent

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