我的表视图控制器中有以下代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("itemCell") as! ItemTableViewCell
cell.itemTitle.text = sortedItems[sortedArray[indexPath.section]]![indexPath.row].itemTitle
cell.itemType.backgroundColor = sortedItems[sortedArray[indexPath.section]]![indexPath.row].itemColor()
// Darkening cells
if /*certain condition is met*/ {
cell.backgroundColor = .redColor() //this colors other cells while scrolling which shouldn't happen
cell.itemTitle.text = "Hello" //this is applied correctly, but why?
}
return cell
}
正如您在“评论”中看到的那样,更改标题的代码会正确应用,而对单元格进行着色则不会。为什么是这样?它与出列的细胞有什么关系吗?为了能够为某些单元格着色,我该如何避免这种行为?
答案 0 :(得分:2)
表格单元格在离开屏幕时会重复使用。因此,您必须假设他们从另一个单元格“遗留”了数据。因此,您需要将它们重置为已知状态。在您的情况下,最简单的方法是处理else
情况。
if /*certain condition is met*/ {
cell.backgroundColor = .redColor() //this colors other cells while scrolling which shouldn't happen
cell.itemTitle.text = "Hello" //this is applied correctly, but why?
} else {
cell.backgroundColor = .whiteColor() // whatever the default color is
cell.itemTitle.text = ""
}