UITableViewCell设置具有多个部分的contentView backgroundColor

时间:2019-10-21 16:40:51

标签: swift uitableview casting

在UITableView的didSelectRow方法中,我正在更改UITableViewCell的contentView.backgroundColor,但是我有两个部分,当我使用以下方法投射单元格时:

let selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)! 并设置selectedCell.contentView.backgroundColor,代码将更改两个部分的backgroundColor。如何仅从indexPath.section投射单元格?

从@rmaddy的答案更新

当我在didSelectRow方法中保存indexPath.row和indexPath.section变量,并在willDisplay单元格或cellForRow中使用变量设置backgroundColor时,它将在每8-16-32-64行上自动设置backgroundColor。

更新2: 在cellForRow中,我将其设置为:

    if(indexPath.row == selectedFromIndex && indexPath.section == selectedFromSection){
        cell.contentView.backgroundColor = UIColor(red: 0, green: 0, blue: 200, alpha: 0.1)
    }else{
        cell.backgroundColor = .clear
        cell.isSelected = false
    }

selectedFromIndex和selectedFromSection是保存在didSelectRowMethod中的变量。 选择仍显示在第8-16-32-64行...

1 个答案:

答案 0 :(得分:2)

这与转换无关。您只需要一个if语句即可检查该部分。

if indexPath.section == 0 { // 1 depending on which section you need
    // get the cell and set the background color
}

但是随着用户滚动,这将失败。在didSelectRow中,您应该做的是更新数据模型以跟踪选择了哪些行,哪些行应具有不同的颜色背景,然后告诉表视图重新加载该行。

然后,cellForRowAt(或willDisplay:forRowAt:)中的代码应使用该数据根据需要设置单元格的颜色。

无论使用哪种方法,请确保根据需要设置或重置背景色,因为行被重用:

// pseudo code:
if row is selected {
    cell.backgroundColor = .someSelectedColor
} else {
    cell.backgroundColor = .someUnselectedColor
}