【发布时间】:2012-09-06 01:40:18
【问题描述】:
我有什么:
一个带有单元格的 UITableView。这个单元格有一个 UITextView 作为子视图。所有委托和数据源均已正确设置。单元格高度是从 heightForRow 等正确获取的。用户在 textView 中输入文本。
我正在尝试做的事情:
我希望单元格在用户键入时更新其高度,而无需将 textView 作为第一响应者。 stackOverflow 上的许多帖子都说空的 beginUpdates/endUpdates 适用于此。
我尝试了什么:
1- 我在 textViewDidChange 中调用了 beginUpdates 和 endUpdates(针对 tableView)。没啥事儿。 (注意:所有的代表都设置正确)。
2- 我什至在 textViewDidEndEditing 中调用了 beginUpdates 和 endUpdates 以确保(以查看它在 textView 辞去第一响应者后是否有效)。它可以工作(当 textView 辞去 firstResponder 时,单元格会调整大小)。
3- 然后我在 textViewDidChange 中尝试了 reloadData。它可以工作,除了它将 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
【问题讨论】:
-
this 链接基本上告诉 UITableView 不支持实时调整单元格大小(因为用户在作为单元格子视图的 textView 中键入)。我应该尝试使用 UIScrollView 还是有人知道在 UITableView 中执行此操作的方法?
-
你在 cellHeightForRowAtIndexPath: 表视图委托方法中指定了新的高度,你实现了那个方法吗?
-
是的,我确实实现了该方法,#3 和 #4 显示该方法工作正常...
标签: ios uitableview uitextview reloaddata