表格视图滚动导致意外结果

时间:2018-07-06 08:40:02

标签: swift uitableview uiimageview

我的表格视图有一个隐藏的图像,当用户完成关卡时,该图像对于相关单元格变为可见。此过程没有问题。

奇怪的是,当我上下滚动表格视图时,此隐藏图像开始随机出现在其他属于未完成级别的单元格上。

如果我离开视图控制器并返回,意外的消失了,如果我再次滚动,它们又回来了。

此外,如果所有图像都被隐藏(表示没有完成的级别),则滚动不会导致此问题。这是我使用的代码段:

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! CustomTableViewCell
    cell.cellView.layer.cornerRadius = cell.cellView.frame.height / 2
    cell.levelLabel.text = levels[indexPath.row]
    cell.lockingImage.image = UIImage(named: lockState[indexPath.row])

    if completeState[indexPath.row] == "true" {
        cell.completedImage.isHidden = false
    } 
    return cell
}

有什么主意吗?

2 个答案:

答案 0 :(得分:0)

您可能没有在单元格的false功能中将图像可见性重置为prepareForReuse,这导致只要有问题的单元格被重用,图像就可见。

答案 1 :(得分:0)

假设您正在做

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyTableViewCell

        cell.myImageView.isHidden = true

        return cell
    }

您应该做的是:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyTableViewCell
    if levels[indexPath.row].isLevelCompleted {
        cell.myImageView.isHidden = false
    } else {
        cell.myImageView.isHidden = true
    }
    return cell
}

这是因为您要使单元出队。这意味着UITableView将使用旧单元格。如果您主动更换电池,那您就走了。