更改UITableView

时间:2019-01-18 12:11:31

标签: ios swift uitableview

我有一个包含8个单元格的表格视图。每个都包含一个标签。对于最后4个单元格,我希望标签的text属性具有蓝色。对于前四个单元格,我希望它们具有黑色。

我使用以下代码在cellForRowAt indexPath中将文本颜色设置为蓝色:

if indexPath.row > 4 {
    cell.label.textColor = UIColor.blue
}

这会将颜色更改为蓝色,但是当用户向下滚动然后再次向上滚动时,前两个单元格标签也具有蓝色,因为单元已被重用。

我该如何解决?谢谢。

5 个答案:

答案 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)

这是因为确实确实在重复使用该单元格。

请确保在elseUITableView中每次都使用 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
}