我有一个包含8个单元格的表格视图。每个都包含一个标签。对于最后4个单元格,我希望标签的text属性具有蓝色。对于前四个单元格,我希望它们具有黑色。
我使用以下代码在cellForRowAt indexPath中将文本颜色设置为蓝色:
if indexPath.row > 4 {
cell.label.textColor = UIColor.blue
}
这会将颜色更改为蓝色,但是当用户向下滚动然后再次向上滚动时,前两个单元格标签也具有蓝色,因为单元已被重用。
我该如何解决?谢谢。
答案 0 :(得分:2)
由于出队问题或单元重用问题,您将不得不在cellForRow方法中添加其他部分。
span
注意:始终记得将 else 部分添加到cellForRow方法中,否则它的行为会很奇怪。
答案 1 :(得分:1)
首先,您的代码在当前状态下会将索引大于4的所有单元格的颜色设置为blue
,而不仅仅是最后4个单元格。您需要更改条件。
然后,您需要添加else语句来处理其他不满足条件的单元格颜色。这是因为单元已被重用,所以它们始终需要设置颜色。
因此您的代码应如下所示:
if indexPath.row > numberOfRows - 4 {
cell.label.textColor = .blue
} else {
cell.label.textColor = .black
}
或者如@jarvis所述,您可以使用三元运算符使代码更紧凑,如下所示:
cell.label.textColor = indexPath.row > numberOfRows - 4 ? .blue : .black
numberOfRows
是表视图的行数。
答案 2 :(得分:0)
您还需要设置其他条件,以免更改
if indexPath.row > 4 {
cell.label.textColor = UIColor.blue
}
else {
cell.label.textColor = UIColor.black
}
答案 3 :(得分:0)
那是因为确实确实在重复使用该单元格。为了解决这个问题,您需要一种逻辑来处理不满足条件indexPath.row > 4
的单元/行。 :)
答案 4 :(得分:0)
这是因为确实确实在重复使用该单元格。
请确保在else
和UITableView
中每次都使用 UICollectionView
条件,以免在复制期间值不会互换。
您可以按照以下两种方法进行操作,以使颜色不会互换。
cell.label.textColor = indexPath.row > 4 ? .blue : .black
OR
if indexPath.row > 4 {
cell.label.textColor = UIColor.blue
}
else {
cell.label.textColor = UIColor.black
}