表格单元格仅在我选择时更新

时间:2018-04-14 21:52:43

标签: ios swift uitableview

我正在制作一个使用表的iOS应用,每个单元格包含两个标签和一个名为ColourCircle的自定义视图。 ColourCircle有一个名为fill: UIColor的属性,我已覆盖draw(_ rect: CGRect)函数以绘制该颜色的圆圈。

单元格的数据从数组data: [(String, Double)]加载,使用视图控制器作为UITableViewDelegateUITableViewDataSource

viewWillAppear我写过:

guard let fetchedData = getArtistData() else {
    performSegue(withIdentifier: "data-error", sender: nil)
    return
}

chart.load(data: fetchedData)
data = fetchedData
table.reloadData()
table.setNeedsLayout()

table.isHidden = false
chart.isHidden = false
activityIndicator.stopAnimating()

而且,在tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)我写过:

let cell = table.dequeueReusableCell(withIdentifier: "artist cell") as! ArtistCell
let name = data[indexPath.row].0

if let proportion = chart.getPercentage(of: name) {
    let percentage = proportion * 100
    cell.name.text = name
    cell.percentage.text = "\(round(percentage * 10) / 10)%" // rounded to 2 d.p.
    cell.colour.fill = chart.colour(for: name)!
}

return cell

当我运行我的应用程序时,可见单元格(即屏幕上的单元格)完美运行,ColourCircle视图显示正确的颜色。当我向下滚动,将新单元格放入视图时,新单元格的颜色不正确,而是按顺序使用先前加载的单元格中的颜色。

例如,假设表格中的前两个单元格是红色和蓝色,那么当我向下滚动时加载的前两个单元格也将按顺序为红色和蓝色。当我向上滚动,重新加载前一个单元格时,会发生同样的事情。

但是,当我选择这些单元格时,它们会变为正确的颜色。然后,当再次卸载和加载时,它们将保持正确的颜色,除非我已经将其中一个单元格进一步向上(通过选择它们),在这种情况下它们将更改为颜色的那些我修好了。

这似乎与重复使用单元格有关,虽然我无法解决如何解决它。

编辑:这是我的ArtistCell课程的代码:

class ArtistCell: UITableViewCell {
    @IBOutlet weak var colour: ColourCircle!
    @IBOutlet weak var name: UILabel!
    @IBOutlet weak var percentage: UILabel!
}

1 个答案:

答案 0 :(得分:1)

根据这个:let cell = table.dequeueReusableCell(withIdentifier: "artist cell") as! ArtistCell - 所有细胞都是可重复使用的。使用prepareForReuse()方法,准备要重用的单元格并清理它们的内容。