我正在制作一个使用表的iOS应用,每个单元格包含两个标签和一个名为ColourCircle
的自定义视图。 ColourCircle
有一个名为fill: UIColor
的属性,我已覆盖draw(_ rect: CGRect)
函数以绘制该颜色的圆圈。
单元格的数据从数组data: [(String, Double)]
加载,使用视图控制器作为UITableViewDelegate
和UITableViewDataSource
。
在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!
}
答案 0 :(得分:1)
根据这个:let cell = table.dequeueReusableCell(withIdentifier: "artist cell") as! ArtistCell
- 所有细胞都是可重复使用的。使用prepareForReuse()方法,准备要重用的单元格并清理它们的内容。