因为UITableView
' 通常重用 ' 的实例,所以UITableViewCell
您必须确保 '-tableView:cellForRowAtIndexPath:
方法正确设置单元格的所有属性。其他陈旧的数据可能会持续存在。我猜这可能是您的问题,缺乏对您的代码的完整了解。
所以,像这样:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellIdentifier = @"TheCellIdentifier";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
ShoppingObject* shopping = [self.myShoppingList objectAtIndex:indexPath.row];
UIImageView* accessoryView = nil;
if (shopping.isDone) {
accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]];
}
cell.accessoryView = accessoryView;
return cell;
}
它通过重用缓存或创建新缓存来获取单元。然后它会检查您的数据模型的状态,以查看该行中表示的对象是否已完成购物,如果购物已完成,则为您提供图像。请注意,未完成购物,没有创建任何附件视图,因此无论在该表行中表示的 ShoppingObject 的状态如何,都将正确设置该单元格的附件视图。
所以我可能会在你的情况下做的-tableView:didSelectRowAtIndexPath:
就是简单地-reloadData
放在桌子上以确保一切都正确更新。