为什么有些细胞即使不满足条件也会被修改?

时间:2016-03-15 02:22:40

标签: ios swift uitableview

我的表视图控制器中有以下代码:

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
    }

正如您在“评论”中看到的那样,更改标题的代码会正确应用,而对单元格进行着色则不会。为什么是这样?它与出列的细胞有什么关系吗?为了能够为某些单元格着色,我该如何避免这种行为?

1 个答案:

答案 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 = ""
        }