tableView reloadData теряет фокус текстового поля


У меня есть несколько ячеек с текстовыми полями и другими метками. В принципе, после того, как пользователь вводит данные с клавиатуры, они могут перейти к другому текстовому полю (с помощью различных средств), и я сохраняю текстовое поле, к которому они хотят перейти, в указателе, а затем устанавливаю первый ответчик, запускающий метод didEndEditing текстового поля. В didEndEditing я вызываю метод refresh, который перезагружает tableData для обновления различных меток, а затем я пытаюсь снова установить firstresponder в текстовое поле, которое у меня есть на хранении.

Конечным результатом является то, что клавиатура остается на экране, но текстовое поле не фокусируется. Однако если вы попробуете еще раз, это сработает во второй раз...

Вот какой-то код. Имейте в виду, что было вырезано много, что имеет дело с расчетами и журналом и т. д. Я только добавил материал, относящийся к этой проблеме.

редактировать кроме того, я знаю, что я упоминал, я использую кнопки со стрелками для навигации.. проблема также здесь, Если вы не используете кнопки со стрелками. Вы должны вручную дважды нажмите (или щелкните) текстовое поле, чтобы получить Фокус после выхода из другого.

 //user presses an arrow button to enter textfield

 //logic is done here to find what the next textfield would be

 _nextTextFieldSelection = (UITextField *)[[_tableView cellForRowAtIndexPath:destinationIndexPath] viewWithTag:newTag];
[_nextTextFieldSelection becomeFirstResponder];


- (void)textFieldDidEndEditing:(UITextField *)textField
{
     //some stuff for calculations
     [self refreshScreen]
}

- (void)refreshScreen
{
    [_tableView reloadData]; 
    //set tables values

    [_nextTextFieldSelection becomeFirstResponder];
}
2 2

2 ответа:

При перезагрузке таблицы ячейки создаются заново. ваш кэшированный nextTextFieldSelection больше не может быть ссылкой на правильный экземпляр текстового поля. Попробуйте кэшировать indexPath вместо текстового поля, а затем использовать тег, чтобы получить соответствующее текстовое поле из ячейки с заданным путем к индексу.

Я столкнулся с той же проблемой-потеря фокуса после tableview reloadData. Но добавление, cellForRowAtIndexPath после tableview reloadData метод решил его. Этот ответ уже дан в комментариях, но думал добавить сюда, чтобы получить больше видимости.