更改UITableView行高而不closures键盘

我有一个UITableViewCell里面的TextView。 TextView中的文本可以在那里编辑。

TextView垂直增长和缩小,取决于文本包含的行数。 到目前为止,我还没有find一个可能让包含TextView的行dynamic增长和缩小。

[tableView reloadData]; 

要么

 [tableView reloadRowsAtIndexPaths: withRowAnimation:]; 

不工作,因为他们每次改变都会closures键盘。

有没有办法改变UITableView中的单个行的高度而不closures键盘?

是的,您可以在input时调整行高。 这是没有logging,它无视原因,但你需要做的是在tableView.rowHeight(或有heightForRowAtIndexPath:准备好计算新的高度)中设置新值,然后执行此操作:

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

reloadRowsAtIndexPaths单元格更改内存值后,如果您在reloadRowsAtIndexPaths之后调用becomeFirstResponder,则尝试将firstResponder设置为不存在的旧单元格(成为FirstResponder返回false和键盘出口)。

解决方法是再次调用cellForRowAtIndexPath为了获得重新加载的单元格的新的内存值,然后调用becomeFirstResponder到该单元格。

任务是调用没有单元重用的行高重新计算(保存当前的响应者)。

可以调用moveRowAtIndexPath:toIndexPath:对于高度变化后的相同indexPath

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