3

是)我有的:

一个带有单元格的 UITableView。这个单元格有一个 UITextView 作为子视图。所有委托和数据源均已正确设置。单元格高度是从 heightForRow 等正确获取的。用户在 textView 中输入文本。

我正在尝试做的事情:

我希望单元格在用户键入时更新其高度,而不将 textView 作为第一响应者。stackOverflow 上的许多帖子都说空的 beginUpdates/endUpdates 对此有效。

我尝试了什么:

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

2-我什至在 textViewDidEndEditing 中调用 beginUpdates 和 endUpdates 只是为了确保(以查看它在 textView 辞去第一响应者后是否有效)。它可以工作(当 textView 辞去 firstResponder 时,单元格会调整大小)。

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

4-然后我尝试了 reloadData 然后直接告诉 textView 再次成为FirstResponder (以保持键盘向上)。它可以工作,但这会导致 textView 中的光标位置、自动更正和退格出现许多问题。

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

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

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

我的问题:

在我看来,#2 表明一个单元格不能更新它的高度,而它的一个子视图是一个 firstResponder。是这样吗?有没有这方面的文件(我找不到)?

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

很抱歉这个很长的问题,但是除了我发布的那些之外,任何人都可以给出任何想法吗?我有一种感觉,我错过了一些非常愚蠢和明显的事情(像往常一样)......

顺便说一句,我同时使用 iOS 模拟器和 5.1 的实际 iPhone

4

1 回答 1

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;
}
于 2012-09-06T11:32:25.210 回答