首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相同的子视图在自定义tableView单元重复使用时反复显示(SWIFT4.1)

相同的子视图在自定义tableView单元重复使用时反复显示(SWIFT4.1)
EN

Stack Overflow用户
提问于 2018-03-20 17:45:31
回答 1查看 456关注 0票数 0

当我在自定义的CGRects单元格中绘制一组tableView时,它们会在单元格被重用时反复显示,这不是我想要的。

下面是我的tableView控制器(cellForRowAt indexPath:)函数:

代码语言:javascript
复制
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as! CustomTableViewCell

    cell.addBlock(item: itemArray[indexPath.row])

    cell.itemTitle.text = itemArray[indexPath.row].itemTitle

    return cell
}

下面是我的CustomTableViewCell类中的函数:(用xib文件创建)

代码语言:javascript
复制
func addBlock(item: Item) {
    for i in 0 ..< item.numberOfBlocks {
        let block = UIView()
        block.frame = CGRect(
            origin: CGPoint(
                x: CGFloat(i) * 10,
                y: 0
            ),
            size: CGSize(
                width: 10,
                height: bounds.size.height
            )
        )
        block.backgroundColor = UIColor.orange
        self.addSubview(block)
    }
}

我认为我根据我的numberOfBlock项中的itemArray属性绘制每个单元格,但是当单元格被重用时,这些块不会重新绘制.我试过在这里和其他地方搜索,但我找不到答案(很长一段时间),我是新的快速,请容忍me...thank你非常多。

注意: Item类包含2个属性: 1. itemTitle: String,2. numberOfBlocks: Int

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-20 18:05:03

我认为您有此问题,因为let block = UIView()在重用时没有从单元格中删除。如果是的话,您可以尝试以下策略:

  1. 掌握每一个let block = UIView()在您的CustomTableViewCell类;
  2. 实现prepareForReuse()方法并从superview中删除所有block

此步骤保证重用的单元格与以前的状态没有任何块。

一些执行情况:

代码语言:javascript
复制
final class CustomTableViewCell: UITableViewCell {

    private var blocks: [UIView] = []

    override func prepareForReuse() {
        super.prepareForReuse()

        blocks.forEach { $0.removeFromSuperview() }
        blocks = []
    }

    func addBlock(item: Item) {
        for ... {
            let block = UIView()
            ...
            blocks.append(block)
        }
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49390942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档