更改 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】:这是因为细胞确实被重复使用了。
确保在 UITableView
和 UICollectionView
中每次都使用 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的表格视图中仅更改选定行和未选定行的字体颜色和大小?