在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行...
答案 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
}