1

我在 UITableViewCell 子类中有一个 UITextView 。获得文本视图和单元格的新高度没有问题。我遇到的问题是告诉 UITableView 更新。

我已经实现heightForRowAtIndexPath:了在 TextView 展开时返回单元格的实时高度。

但是某处`[tableView beginUpdates]; [tableView endUpdates]; 必须调用。

如何?我应该向设置为 UITableViewController 子类的 UITableViewCell 添加一个委托属性吗?然后在单元格扩展高度并且Tableview需要更新时发送委托消息?在 UITableViewCell 和 Controller 之间有一个委托似乎有点奇怪?

我尝试使用 NSNotificationCenter,但我有不止一个可编辑单元格,而且不止一个这种性质的表格视图。所以没有办法只注册单元格的通知而不复制和粘贴同一行,这不好(因为单元格是在 IB 中创建的,而不是在数组或集合中),并且有多个tableviews 表示另一个表视图发生异常,因为它被告知要更新但没有任何变化。

我已经看到了很多关于这个主题的问题和答案,但是当谈到更新 tableview 时,他们都只是说“现在更新 tableview”而不是如何。那么我如何告诉他从其中一个单元格更新表格视图?

4

2 回答 2

1

我认为这种行为最好在UITableViewController而不是视图本身(UITableViewCell)中实现。

您的控制器负责设置单元格高度,并且通常是您UITextView的 's 的代表,所以让它处理所有这些。

在您的textViewDidChange方法中,确定单元格的新高度应该是多少,更新您的数据结构以反映这一点,然后调用reloadRowsAtIndexPaths:withRowAnimation:以使其实际更改。

编辑:
因此,由于您不喜欢我的第一个建议,因此另一种方法是将recommendedRowHeight属性添加到您的 custom UITableViewCell

然后,您可以通过以下方式观察此属性,也可以使用UITableViewController以下方法实现委托协议:

- (void)recommendedRowHeightDidChange
// or 
- (void)recommendedRowHeightDidChangeTo:(CGFloat)newHeight

然后,当您的身高发生变化时,recommendedRowHeight如果您走那条路线,请更新您的属性并调用您的委托方法。

无论哪种方式,一旦你的控制器发现一个单元格的推荐行高已经改变,它就可以做它应该做的事情。更新反映当前行高的数据结构,然后调用reloadRowsAtIndexPaths:withRowAnimation:.

于 2012-05-26T01:11:59.637 回答
0

您可以将 tableview 控制器对象添加为对 tableview 单元类的弱引用。在 tableview 控制器中,您可以有一个从 tableview 单元类调用的方法。

于 2012-05-26T04:06:58.267 回答