在不关闭键盘的情况下更改UITableView行高

时间:2011-03-17 19:32:46

标签: objective-c ios uitableview height row

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

TextView根据文本包含的行数垂直增长和缩小。到目前为止,我还没有发现让包含TextView的行动态增长和缩小的可能性。

[tableView reloadData];

[tableView reloadRowsAtIndexPaths: withRowAnimation:];

不起作用,因为他们在每次更改时都会关闭键盘。

有没有办法在不关闭键盘的情况下更改UITableView中单个行的高度?

3 个答案:

答案 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调用到该单元格。