TableViewCell中的动态元素数

时间:2016-09-23 14:46:47

标签: ios uitableview

我需要一个接一个地垂直添加标签,它们的编号是动态的。现在,它可以正常使用此代码:

let numUnitsLabel = UILabel(frame: CGRectZero)
numUnitsLabel.text = units
numUnitsLabel.font = UIFont.boldSystemFontOfSize(28)
numUnitsLabel.textColor = UIColor.redColor()
numUnitsLabel.translatesAutoresizingMaskIntoConstraints = false
cell.contentView.addSubview(numUnitsLabel)

let topConstraint = NSLayoutConstraint(item: numUnitsLabel, attribute: .Top, relatedBy: .Equal, toItem: cell.contentView, attribute: .Top, multiplier: 1, constant: 8 * CGFloat(i+1) + CGFloat(i*25) + CGFloat(i*20) - 5)
let rightConstraint = NSLayoutConstraint(item: numUnitsLabel, attribute: .Trailing, relatedBy: .Equal, toItem: cell.contentView, attribute: .Trailing, multiplier: 1, constant: -10)

cell.contentView.addConstraints([topConstraint, rightConstraint])

细胞被拉得很好。但是当我在列表中添加新项目并调用tableView.reloadData时,旧标签会被“记住”而且它们会被新记录。新添加的对象放在数组中的第一位,它们就像一个又一个......也许我的方法很糟糕,但如果您有任何建议请咨询我。

1 个答案:

答案 0 :(得分:1)

请记住,细胞会被重复使用,因此无论先前是否制备了细胞,它仍然具有所有这种状态。特别是,它的视图层次结构(添加的子视图)仍然存在。这样做的原因通常是表格单元格的布局保持不变,只有内容才能在cellForRowAtIndexPath中重新设置。

你首先使用反模式,这就是你遇到困难的原因。

如果您确实要清除并重新布局单元格,请每次都明确删除所有子视图,例如:

https://techfuzionwithsam.wordpress.com/2014/12/23/what-is-the-best-way-to-remove-all-subviews-from-parent-viewsuper-view/

我怀疑,(不可否认,这不是CodeReview)你的设计存在缺陷。通常,表格细胞不需要随着内部元素的动态计数而增长。您可能需要嵌套表(!!),每个表中只有一个多行UITextView,或者是由具有自定义节标题视图的部分构成的表。