【问题标题】:Passing data to custom UITableViewCell with adding subviews通过添加子视图将数据传递给自定义 UITableViewCell
【发布时间】:2016-02-08 00:57:59
【问题描述】:

我将数据传递给自定义 UITableViewCell 并根据该数据显示或隐藏动态添加的子视图。我正在重用在情节提要中创建的单元格。一切都按预期工作,直到某些单元格被重用,例如在滚动时它将“随机”隐藏或显示动态添加的子视图。

我需要什么

我需要一种通过方法(setData)设置单元格数据的方法,添加动态创建的子视图,同时允许重用单元格而不会在其外观上产生故障,特别是添加的子视图以及单元格状态。

问题

我不知道我应该在哪里创建子视图,因此在重复使用单元格时不必重新创建它,因此当我想在 setData 方法中隐藏或显示它时它不会出错。在创建新子视图时还可以访问 IBOutlet storyboardLabel。

CustomTableViewCell

class CustomTableViewCell : UITableViewCell {
   var data: DataItem?
   var customSubview: UIView?

   @IBOutlet weak var storyboardLabel: UILabel!

   //setting the data of a cell and adding the subview
   func setData(DataItem data) {
      // adding the view
      let customSubview = UIView.init(...)
      customSubview.bounds = storyboardLabel.bounds
      customSubview.hidden = data.showSubview
      self.contentView.addSubview(customSubview)
   }
}

添加单元格

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("storyboardTableCell") as! CustomTableViewCell
    cell.setData(self.data[indexPath.section][indexPath.row] as! DataItem)
    return cell
}

【问题讨论】:

  • 你看过prepareForReuse()了吗?
  • 我确实做到了,但我正在寻找一个不重新创建子视图的解决方案,如果有的话。因为在我看来,重用时重新创建它似乎有点不必要。
  • 你可以做的是懒惰地创建子​​视图并在prepareForReuse 检查它是否存在并隐藏它。我认为 SwiftArchitect 的解释应该足够了,但如果你仍然需要帮助,我可以告诉你如何做。
  • 谢谢大家,非常感谢您的帮助,我现在正在使用 prepareForReuse。祝你有个愉快的夜晚。

标签: ios swift uitableview


【解决方案1】:

一切都按预期工作,直到某些单元格被重复使用...

没有按预期工作:您正在将对象添加到缓存的UITableViewCell,当然,当您在随后的cellForRowAtIndexPath 上再次传递该缓存单元时,您正在添加新对象。

考虑在 IB 中使用一组视图,每个视图都满足您的单元组织,从而节省以编程方式添加子视图。

你需要清理你的牢房。

  • 要么删除您在cellForRowAtIndexPath 中添加的所有内容
    • 如果您不想重新添加已经存在的视图,可以使用tagsviewWithTag
  • 或者实现prepareForReuse()

您可以在 this Stack Overflow post 上找到一个示例(以及类似的讨论)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多