【问题标题】:How to have an editable multine UITextView in UITableViewCell如何在 UITableViewCell 中有一个可编辑的多 UITextView
【发布时间】:2012-05-26 00:51:20
【问题描述】:

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

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

但是在某个地方 `[tableView beginUpdates]; [tableView endUpdates];必须调用。

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

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

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

【问题讨论】:

    标签: iphone objective-c uitableview


    【解决方案1】:

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

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

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

    编辑:
    因此,既然您不喜欢我的第一个建议,那么另一种方法是将recommendedRowHeight 属性添加到您的自定义UITableViewCell

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

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

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

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

    【讨论】:

    • 但这意味着如果我想在不同的表格视图中重用单元格,我必须复制和粘贴代码,而不是仅仅在单元子类中的一个地方
    • 您可以使用相同的思路,而不是对视图进行子类化,而是对控制器进行子类化,以便将其保存在一个地方......
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多