我使用Core Data和MagicalRecord管理项,可以启用或禁用。有
数据存储中项实体上的已启用标志。 项还有标题。最后我
使用NSFetchedResultsController
在表格视图中显示项目。表视图有两个
部分:第一部分用于已启用的项目,第二部分用于已禁用的项目。所有项目
默认情况下启用 禁用项的单元格具有不同的背景颜色(黄色)。
为了使事情复杂化,单元格从nib文件加载,如下所示:
- (void)viewDidLoad
{
// ...
self.items = [Item fetchAllGroupedBy:@"enabled"
withPredicate:nil
sortedBy:@"enabled,createdOn"
ascending:NO
delegate:self];
// ...
[self.tableView registerNib:[UINib nibWithNibName:@"CustomTableViewCell" bundle:nil]
forCellReuseIdentifier:@"CustomCellReuseIdentifier"];
// ...
}
// ...
- (CustomTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *reuseIdentifier = @"CustomCellReuseIdentifier";
CustomTableViewCell *cell =
(CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier
forIndexPath:indexPath];
[self configureCell:cell forRowAtIndexPath:indexPath];
return cell;
}
- (void)configureCell:(CustomTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
Item *item = [self.items objectAtIndexPath:indexPath];
cell.titleLabel.text = item.title;
if (!item.enabled.boolValue) {
cell.backgroundColor = [UIColor colorWithRed:0.999 green:0.895 blue:0.452 alpha:1.000];
}
}
// ...
现在,当我禁用一个项目,删除它,然后创建一个新的项目 标题相同, 新的项目的单元格具有黄色背景,即使新的项目已启用 。如果我检查项目 它本身确实是启用,所以它只是保持黄色的单元格。
有人知道问题可能是什么吗?
答案 0 :(得分:1)
这是一个常见的错误。
您正在使可重复使用的单元格出列。它将处于添加到队列(或缓存,如果您愿意)的任何状态。
您需要在else
方法中添加configureCell:
代码块:
- (void)configureCell:(CustomTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
Item *item = [self.items objectAtIndexPath:indexPath];
cell.titleLabel.text = item.title;
if (!item.enabled.boolValue) {
cell.backgroundColor = [UIColor colorWithRed:0.999 green:0.895 blue:0.452 alpha:1.000];
}
else
{
// Set cell.backgroundColor to the enabled color
}
}
答案 1 :(得分:0)
您需要设置默认背景颜色。 这是因为在出现单元格后,背景颜色不会自动设置。 所以就这样吧:
cell.backgroundColor = [UIColor whiteColor]; //put here default color of your cell
if (!item.enabled.boolValue) {
cell.backgroundColor = [UIColor colorWithRed:0.999 green:0.895 blue:0.452 alpha:1.000];
}