我有这个功能:
multipdf
好吧,有了这个功能,我正在动态添加一个行列表。 为何动态?因为,列数取决于数据。 不要把注意力集中在那上面。
该列表有244个元素。 结果显示正常,但是一旦我开始滚动,我就明白了:
如何动态添加元素而不会出现此错误?
答案 0 :(得分:2)
细胞被重复使用。您不断为每个单元格添加越来越多的标签。
正确的解决方案是创建包含所需标签的自定义单元格类。然后只需在cellForRowAt
中设置该标签的文字即可。请勿在{{1}}中创建和添加子视图。
但请记住,您可能只想使用cellForRowAt
提供的textLabel
属性。无需自定义单元格或您自己的标签。
UITableViewCell
答案 1 :(得分:0)
我找到了一个解决方案,希望这对您有用!!!
您必须添加cellForRowAt
此代码:
for item in cell.contentView.subviews
{
item.removeFromSuperview()
}
刚刚拿到牢房。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
for item in cell.contentView.subviews
{
item.removeFromSuperview()
}
let label = UILabel(frame: CGRect(x: 100, y: 14, width: 300, height: 30))
label.text = "\(data[indexPath.row])"
label.tag = indexPath.row
let btn = UIButton(type: UIButtonType.custom) as UIButton
btn.backgroundColor = UIColor.red
btn.setTitle("boton", for: .normal)
btn.frame = CGRect(x:0, y:5, width: 80, height:40)
//btn.addTarget(self, action: "buttonPressed:", for: UIControlEvents.touchUpInside)
btn.tag = indexPath.row
cell.contentView.addSubview(btn)
cell.contentView.addSubview(label)
cell.tag = indexPath.row
return cell
}
答案 2 :(得分:-1)
UITableview在向下滚动时创建10个单元格重新创建单元格视图
你可以使用
cell.contentView.removeFromSuperview()
之前的cell.contentView.addSubview(label)
或使用cell.textLabel?.text
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
cell.contentView.removeFromSuperview()
let label = UILabel(frame: CGRect(x: 100, y: 14, width: 400, height: 30))
label.text = "\(data[indexPath.row])"
label.tag = indexPath.row
cell.contentView.addSubview(label)
return cell
}
注意此解决方案将删除单元格中的所有子视图