我想在屏幕上显示UITableViewCell
时更改其颜色,以反映诸如已读/未读行为的内容。例如:
用户将看到一个列表,该列表首先是红色,然后一段时间后应将颜色更改为clearColor。当用户向下滚动时,新单元格应在限定时间内再次变为红色,然后更改为clearColor。
答案 0 :(得分:0)
您可以尝试
快速
func tableView(_ tableView: UITableView,
willDisplay cell: UITableViewCell,
forRowAt indexPath: IndexPath) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
if let cel = tableView.cellForRow(at: indexPath) { // not used cell directly because it may be nil at this moment
cel.backgroundColor = UIColor.red // save this state in model to avoid dequeuing problems
}
}
}
Objective-C
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
UITableViewCell*cel = [tableView cellForRowAtIndexPath:indexPath];
cel.backgroundColor = [UIColor YourColor]; // won't ser it cel is nil
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
UITableViewCell*cel = [tableView cellForRowAtIndexPath:indexPath];
cel.backgroundColor = [UIColor clearColor]; // won't ser it cel is nil
});
});
}
答案 1 :(得分:0)
您需要在数据源中保存每行/单元格的状态。由于单元已被重用,因此您不应将此数据存储在单元本身中。我假设您有某种数组作为tableview的数据源?因此,最简单的解决方案是为数据源中的每个项目添加一个属性,以存储是否已显示特定项目的单元格。
是否要为每个单元格提供默认颜色,下一次将该单元格滚动到视图中时,是否应该更改颜色以表示以前已查看过该颜色?
答案 2 :(得分:0)
有不同的方法。一种方法是创建一个全为false的布尔数组,其大小将等于行数。
var array = [Bool](repeating: false, count: self.tableView.numberOfRows(inSection: 0))
// assuming only 1 section is available
在tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath)内部,您必须执行以下操作:
array[indexPath.row] = true
在tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)内部,您可以检查布尔值并设置颜色:
if array[indexPath.row] {
cell.backgroundColor = .red
} else {
cell.backgroundColor = .blue
}