这让我彻底疯了。
我有一个 UITableView,其中的单元格通过 NSFetchedResultsController 填充,它们的背景颜色应该基于核心数据参数之一设置。
此表视图位于 UISplitViewController 的主视图中,所选单元格需要保持可见选中状态以指示详细视图中显示的内容。
根据其他几个 Stack Overflow 问题的指导,我了解到配置单元的理想位置是在 willDisplayCell 委托调用期间,如下所示:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
WorkTask *workTask = (WorkTask*) [self.fetchedResultsController objectAtIndexPath:indexPath];
if ([workTask.strStatus isEqualToString:@"A"]) {
cell.backgroundColor = [self colorWithHexString:@"fffdcf"];
// cell.textLabel.backgroundColor = [self colorWithHexString:@"fffdcf"];
// cell.detailTextLabel.backgroundColor = [self colorWithHexString:@"fffdcf"];
} else if ([workTask.strStatus isEqualToString:@"B"]) {
cell.backgroundColor = [self colorWithHexString:@"cfffd1"];
// cell.textLabel.backgroundColor = [self colorWithHexString:@"cfffd1"];
// cell.detailTextLabel.backgroundColor = [self colorWithHexString:@"cfffd1"];
} else if ([workTask.strStatus isEqualToString:@"C"]) {
cell.backgroundColor = [self colorWithHexString:@"ffcfcf"];
// cell.textLabel.backgroundColor = [self colorWithHexString:@"ffcfcf"];
// cell.detailTextLabel.backgroundColor = [self colorWithHexString:@"ffcfcf"];
} else {
cell.backgroundColor = [self colorWithHexString:@"ffffff"];
// cell.backgroundColor = cell.contentView.backgroundColor;
}
这主要是一种工作。但...
根据我如何使用不同的变体来实现这一点,我最终会在 textLabel 和 detailTextLabel 后面有时(而且只是有时?!?)忽略背景颜色。或导致单元格在选择时显示不正确。或者在没有背景颜色的情况下显示复选标记指示器。或者将新项目添加到显示在表格中的核心数据数据库中,但单元格没有背景颜色,但文本标签具有背景颜色。
无论我做什么,我都没有找到一种简单而直观的方法来使事情的整体表现符合预期 - 特别是在以编程方式选择单元格时。
事实上 - 单元格选择似乎可能是问题的根源。选定的单元格通常是在我将选择更改为另一个单元格后最终绘制不正确的单元格,特别是如果在选择单元格时单元格的颜色发生了变化。
有没有任何例子说明这应该如何工作?!?!
谢谢!