我在UITableViewCell中有一个TextView。 TextView中的文本可以在那里进行编辑。
TextView根据文本包含的行数垂直增长和缩小。到目前为止,我还没有发现让包含TextView的行动态增长和缩小的可能性。
[tableView reloadData];
或
[tableView reloadRowsAtIndexPaths: withRowAnimation:];
不起作用,因为他们在每次更改时都会关闭键盘。
有没有办法在不关闭键盘的情况下更改UITableView中单个行的高度?
答案 0 :(得分:33)
是的,您可以在键入时调整行高。它没有记录,它无视原因,但您需要做的就是在tableView.rowHeight中设置新值(或者让heightForRowAtIndexPath准备好计算新的高度),然后执行以下操作:
[tableView beginUpdates]; // updates the row heights ...
[tableView endUpdates]; // ... nothing needed in between
答案 1 :(得分:1)
任务是调用行高重新计算而不重复单元格(以保存当前响应者)。
可以在高度变化后立即为同一个indexPath调用moveRowAtIndexPath:toIndexPath:
- (void)textInputTableView:(UITableView *)tableView cellHeightDidChangeForIndexPath:(NSIndexPath *)indexPath
{
[tableView moveRowAtIndexPath:indexPath toIndexPath:indexPath];
}
答案 2 :(得分:0)
在reloadRowsAtIndexPaths之后,单元格会更改内存值,因此如果在reloadRowsAtIndexPaths之后调用becomeFirstResponder,则尝试将旧单元格设置为firstResponder,该单元格不存在(becomeFirstResponder返回false并退出键盘)。
解决方案是再次调用cellForRowAtIndexPath以获取重新加载的单元格的新内存值,然后将wasFirstResponder调用到该单元格。