如何在UITableViewCell中拥有可编辑的多UITextView

时间:2012-05-26 00:51:20

标签: iphone objective-c uitableview

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

我已实现heightForRowAtIndexPath:以在TextView扩展时返回单元格的实时高度。

但某处`[tableView beginUpdates]; [tableView endUpdates];必须被召唤。

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

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

我在这个主题上看到了很多问题和答案,但是当谈到更新tableview时,他们只是说“现在更新tableview”而不是如何。那么我如何从其中一个单元格中更新tableview以进行更新?

2 个答案:

答案 0 :(得分:1)

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

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

textViewDidChange方法中,找出单元格的新高度应该是多少,更新数据结构以反映出来,并调用reloadRowsAtIndexPaths:withRowAnimation:让它实际更改。

修改
因此,由于您不喜欢我的第一个建议,另一种方法是将recommendedRowHeight属性添加到您的自定义UITableViewCell

然后,您可以从UITableViewController观察此属性,或者使用以下方法实现委托协议:

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

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

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

答案 1 :(得分:0)

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