Удалить клавиатуру, когда ячейка таблицы выбрана - PullRequest
0 голосов
/ 15 января 2012

У меня есть модальный режим, подобный следующему:

enter image description here

Несмотря на внешний вид, первые два поля - это UITextFields, которые становятся первыми респондентами и отображают клавиатуру.Третий элемент «Отдел» - это табличное представление, которое выдвигает другое представление.

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

enter image description here

Когда он выбран, перед нажатием я хотел бы скрыть клавиатуру.Это небольшая деталь, но попробуйте добавить новое событие в приложение Apple «Календарь».Он открывается с первым текстовым полем в качестве первого респондента (поэтому клавиатура присутствует).Если вы выберете начальную / конечную ячейку, клавиатура будет скрыта при нажатии следующего вида.

Как мне этого добиться?В качестве теста я попытался:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"hiding keyboard");
if ([ingredientName isFirstResponder]) {
    NSLog(@"resigning name field");
    [ingredientName resignFirstResponder];
}
else if ([ingredientAmount isFirstResponder]){
    NSLog(@"resigning amount field");
    [ingredientAmount resignFirstResponder];
}

}

Ведение журнала подтверждает, что они вызывают.Но клавиатура не скрывает.Он просто остается на месте, когда вид выдвигается.И по возвращении предыдущее поле все еще имеет фокус (и клавиатура отсутствует).

Есть идеи?

Ответы [ 3 ]

1 голос
/ 15 января 2012

resignFrstResponder не откажется от клавиатуры, когда вы используете модальное представление.

Другой разработчик нашел обходной путь для такого поведения здесь: http://viraj -workstuff.blogspot.com / 2010/12 / resignfirstresponder-do-not-hide.html

1 голос
/ 15 января 2012

Не очень элегантно, но попробуйте украсть статус первого респондента с помощью специального, невидимого UITextField:

-(void)dismissKeyboard {
    UITextField *textField;
    textField=[[UITextField alloc] initWithFrame:CGRectZero];
    [self.view addSubview:textField];
    [textField becomeFirstResponder];
    [textField resignFirstResponder];
    [textField removeFromSuperview];
    // [textField release] // uncomment if not using ARC
}
0 голосов
/ 15 января 2012

Две вещи: вы используете переход для продвижения этого другого VC?Если это так, перезапустите клавиатуру в методе prepareForSegue.

Если нет, попробуйте использовать willSelectRowForIndexPath вместо didSelectRowAtIndexPath

...