内部带有TextView的快速自定义UITableViewCell消失

Posted

技术标签:

【中文标题】内部带有TextView的快速自定义UITableViewCell消失【英文标题】:swift custom UITableViewCell with TextView inside disappears 【发布时间】:2015-06-11 22:28:27 【问题描述】:

我正在尝试在我的 tableView 中获取一个带有 textView 的自定义 tableView 单元格。我制作了一个自定义 UITableViewCell,里面有一个 textView。

我可以让自定义的 UITableViewCell 与里面的 textView 出现在 UITableView 中。

我可以在 textView 内部单击以输入内容,但是当我完成输入并单击另一个 tableViewCell 时,第一个带有 textView 的 tableViewCell 消失了。消失后,变成了一个空的tableViewCell。 XCode 给出这个消息: "没有重复使用表格单元格的索引路径"

但是,当我在 tableView 中滚动并回滚到空的 tableViewCell 时,它会重新出现。 我不知道如何防止 tableViewCell 消失。似乎答案与在 UITableView 中使用 restoreIdentifier 有关,但我不确定如何使用它。在文档中,它说使用 restoreIdentifier 进行状态保存。

这是我的相关代码:

inside ViewDidLoad():
tableView.registerClass(PhotoAndRateTableViewCell.classForCoder(), forCellReuseIdentifier: ReuseIds.reviewCell)
tableView.registerNib(UINib(nibName: "PhotoAndRateTableViewCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: ReuseIds.reviewCell)

cellForRowAtIndexPath 内:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    var section = indexPath.section

    let cell = UITableViewCell()
        var cell = tableView.dequeueReusableCellWithIdentifier(ReuseIds.reviewCell, forIndexPath: indexPath) as PhotoAndRateTableViewCell

    cell.selectionStyle = UITableViewCellSelectionStyle.None

    return cell

【问题讨论】:

你在哪里创建你的文本视图? 在自定义tableViewCell的xib文件中创建textView。文件是 PhotoAndRateTableViewCell.xib 这样我就可以使用 autoLayout 了。 我现在可以使用 func textViewDidEndEditing(textView: UITextView) tableView.reloadData() 让 tableViewCell 重新出现。但是,里面的数据似乎没有得到保留。 【参考方案1】:

您误用了出队过程:

var cell = tableView.dequeueReusableCellWithIdentifier(ReuseIds.reviewCell, forIndexPath: indexPath) as? PhotoAndRateTableViewCell

if (cell == nil) 
   cell = PhotoAndRateTableviewCell();

如果可用,您想重复使用一个单元格,如果没有,则创建一个新单元格。在您的情况下,您每次(通用类)都创建一个单元格,然后尝试从您的自定义类(从未创建过)中取出一个单元格

就保留数据而言,您需要在表格单元格中实现 prepareForReuse 方法,该方法应该清除单元格中包含的任何索引特定数据。然后在 cellForRow 中,您可以重新设置单元格的数据以重新出现

【讨论】:

我试着输入这个,但是对于 (cell == nil),XCode 有一个错误,说“不能调用 '==' 类型的参数列表 '(UITableViewCell, NilLiterl ... 我得到了 (cell == nil) 的检查,但同样的问题仍然存在。从文档看来,我需要实现 UIDataSourceModelAssociation 协议。但是,似乎没有在 tableView 中执行此操作的示例

以上是关于内部带有TextView的快速自定义UITableViewCell消失的主要内容,如果未能解决你的问题,请参考以下文章

自定义TextView带有各类.ttf字体的TextView

带有自定义 textview 的 iphone tableview 单元格 - 获取 textview 参考

Android:带有自定义标题的圆角TextView XML布局

带有旋转,放大,缩小和移动在android中的自定义textview?

自定义 UIView 中的 UItable

UITable 视图界面构建器创建