为什么beginUpdates没有在UITableView中调整我的单元格大小?

时间:2012-09-06 01:40:18

标签: ios uitableview uitextview reloaddata

我有什么:

带有单元格的UITableView。此单元格具有UITextView作为子视图。所有代理和数据源都已正确设置。从heightForRow等正确获取单元格高度。用户在textView中输入文本。

我正在尝试做什么:

我希望单元格更新其高度,因为用户键入WITHOUT将textView作为第一响应者重新签名。 stackOverflow上的许多帖子都说空的beginUpdates / endUpdates适用于此。

我尝试了什么:

1-我在textViewDidChange中调用了beginUpdates和endUpdates(用于tableView)。没啥事儿。 (注意:所有代表都设置正确)。

2-我甚至在textViewDidEndEditing中调用了beginUpdates和endUpdates来确保(看看它是否在textView作为第一响应者后重新启动)。它有效(当textView作为firstResponder重新调整时,单元格会调整大小。)

3-然后我在textViewDidChange中尝试了reloadData。它可以工作,除了它将textView作为第一响应者(键盘在每个键入的字符上消失)。

然后我尝试了reloadData,然后再次告诉textView再次成为FirstResponder(以保持键盘运行)。它有效,但这会导致游标位置和textView中的自动更正和退格等许多问题。

5-然后我尝试了reloadData,然后在我希望键盘保持原状时在textViewShouldEndEditing中返回NO,但由于某种原因,单元格不会更新它的高度。

6-最后,我尝试了reloadRowsAtIndexPaths等,然后在textViewShouldEndEditing中返回NO,但它给了我一个错误,说它无法删除拒绝resignFirstResponder的对象。

我还在textViewDidChange中尝试了reloadInputViews和setNeedsDisplay以及setNeedsLayout等方法,但没有任何反应。

我的问题:

在我看来,#2表明,当其中一个子视图是第一个响应者时,单元格无法更新其高度。是这样的吗?有没有关于此的文件(我找不到)?

为什么beginUpdates / EndUpdates不起作用?是否存在已知或常见的情况?我正在设置的方式可能有问题吗?但调整大小与#3和#4完美配合(表明我的所有委托方法等都设置正确)。

对不起这个很长的问题很抱歉,除了我发布的内容之外,还有谁可以提出任何想法?我有一种感觉,这是一些非常愚蠢而且显而易见的事情,我很想念(像往常一样)......

顺便说一下,我正在使用iOS模拟器和带有5.1的实际iPhone

1 个答案:

答案 0 :(得分:2)

它在我的小型演示应用程序中完美运行。请注意,代码获取textView委托消息,设置应用于每个单元格的ivar高度,然后调用begin / end - 每个字符按下时单元格都变大:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Asked for Height");
    return height;
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSLog(@"Text");
    height += 10;
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
    return YES;
}