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

Изменение высоты строки UITableView без отклонения клавиатуры

У меня есть TextView внутри UITableViewCell. Текст внутри TextView можно редактировать там, где есть.

TextView растет и сжимается вертикально в зависимости от количества строк, содержащихся в тексте. До сих пор я не нашел возможности также позволить строке, содержащей TextView, расти и динамически сокращаться.

[tableView reloadData];

или

[tableView reloadRowsAtIndexPaths: withRowAnimation:];

не работают, потому что они отклоняют клавиатуру при каждом изменении.

Есть ли способ изменить высоту отдельной строки в UITableView без отклонения клавиатуры?

4b9b3361

Ответ 1

Да, вы можете настроить высоту строк по мере ввода. Это не задокументировано, и это бросает вызов причине, но все, что вам нужно сделать, это установить новое значение в tableView.rowHeight(или иметь heightForRowAtIndexPath: готов к вычислению новых высот), а затем сделать это:

[tableView beginUpdates]; // updates the row heights ...
[tableView endUpdates]; // ... nothing needed in between

Ответ 2

После reloadRowsAtIndexPaths ячейка изменяет значение памяти, поэтому, если вы вызываете startFirstResponder сразу после reloadRowsAtIndexPaths, вы пытаетесь установить в качестве firstResponder старую ячейку, которая не существует (startFirstResponder возвращает ложные и клавиатурные выходы).

Решение состоит в том, чтобы снова вызвать cellForRowAtIndexPath, чтобы получить новое значение памяти перезагруженной ячейки, а затем вызвать функцию getFirstResponder для этой ячейки.

Ответ 3

Задача состоит в том, чтобы вызвать перерасчет высоты строки без повторного использования ячеек (чтобы сохранить текущий ответчик).

Можно вызвать moveRowAtIndexPath:toIndexPath: для одного и того же indexPath сразу после изменения высоты

- (void)textInputTableView:(UITableView *)tableView cellHeightDidChangeForIndexPath:(NSIndexPath *)indexPath
{
    [tableView moveRowAtIndexPath:indexPath toIndexPath:indexPath];
}