动态添加视图到单元格会在表格中产生问题

时间:2018-04-06 17:01:12

标签: swift uitableview tableview

我有这个功能:

multipdf

好吧,有了这个功能,我正在动态添加一个行列表。 为何动态?因为,列数取决于数据。 不要把注意力集中在那上面。

该列表有244个元素。 结果显示正常,但是一旦我开始滚动,我就明白了:

enter image description here

如何动态添加元素而不会出现此错误?

3 个答案:

答案 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
    }
  

注意此解决方案将删除单元格中的所有子视图