通过添加子视图

时间:2016-02-08 00:58:00

标签: ios swift uitableview

我将数据传递到自定义UITableViewCell,并根据我想要显示或隐藏动态添加的子视图的数据。我正在重用在故事板中创建的单元格。一切都按预期工作,直到一些细胞被重复使用,例如在滚动它时将随机地#34;隐藏或显示动态添加的子视图。

我需要什么

我需要一种方法来通过方法(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
}

1 个答案:

答案 0 :(得分:0)

  

所有内容都按预期工作,直到某些单元格被重用...

没有任何工作符合预期:您正在向缓存的UITableViewCell添加对象,当然,当您在后续cellForRowAtIndexPath上再次传递该缓存单元时,您正在添加新对象。 / p>

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

你需要清理你的牢房。

  • 删除您在cellForRowAtIndexPath中添加的所有内容
    • 如果您想避免重新添加已有的观看次数,可以使用tagsviewWithTag
  • 或实施prepareForReuse()

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

相关问题