更改 UITableView 中一些选定的表格视图单元格文本的颜色

Posted

技术标签:

【中文标题】更改 UITableView 中一些选定的表格视图单元格文本的颜色【英文标题】:Changing the color of a few selected table view cells text in UITableView 【发布时间】:2019-01-18 12:11:30 【问题描述】:

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

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

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

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

我该如何解决这个问题?谢谢。

【问题讨论】:

使用else 部分作为if 或使用三元运算符?: 没有问题。无论如何,您可以为其他单元格添加一个 else 子句设置为黑色。 【参考方案1】:

由于出队问题或单元重用问题,您必须在 cellForRow 方法中添加 else 部分。

cell.label.textColor = indexPath.row > 4 ? .blue : .black

注意:永远记得在 cellForRow 方法中添加 else 部分,否则它的行为会很奇怪。

【讨论】:

【参考方案2】:

首先,您的代码在其当前状态下将索引大于 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 是表格视图的行数。

【讨论】:

【参考方案3】:

您需要设置其他条件也因此,它不会改变。 P>

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

else 
    cell.label.textColor = UIColor.black

【讨论】:

【参考方案4】:

那是因为细胞确实被重复使用了。为了解决这个问题,您需要一个逻辑来处理不满足您的条件indexPath.row > 4 的单元格/行。 :)

【讨论】:

【参考方案5】:

这是因为细胞确实被重复使用了。

确保在 UITableViewUICollectionView 中每次都使用 else 条件,这样在滚动期间值不会互换。

您可以遵循以下两种方法,这样颜色就不会互换。

cell.label.textColor = indexPath.row > 4 ? .blue : .black

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

else 
    cell.label.textColor = UIColor.black

【讨论】:

以上是关于更改 UITableView 中一些选定的表格视图单元格文本的颜色的主要内容,如果未能解决你的问题,请参考以下文章

多选模式下的 UITableView 删除选定单元格中所有子视图的背景颜色

如何在swift 3的表格视图中仅更改选定行和未选定行的字体颜色和大小?

在表格视图中选择新行时如何取消选择选定的行?

如何从表格视图中的选定单元格中获取文本?

在不重新加载整个表格视图的情况下更改 UITableView 的部分页眉/页脚标题

在自定义表格单元中更改图像视图