您的问题不在您包含的代码示例中。你的问题在别处。我们无法根据这一片段诊断问题。您必须与我们分享更完整的代码示例。
与您的问题无关,您的didSelectRowAtIndexPath
. 你不应该只是在cellAccessoryType
这里更新。您确实应该更新支持您的 UI 的模型。如果表的行数超过在任何给定时刻可见的行数,这将是至关重要的。
为了说明这个想法,让我们假设您的模型是一个具有两个属性的对象数组,title
即单元格的属性和单元格是否selected
存在。
因此,您cellForRowAtIndexPath
可能看起来像:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
RowData *rowObject = self.objects[indexPath.row];
cell.textLabel.text = rowObject.title;
if (rowObject.isSelected)
cell.accessoryType = UITableViewCellAccessoryCheckmark;
else
cell.accessoryType = UITableViewCellAccessoryNone;
return cell;
}
你didSelectRowAtIndexPath
可能看起来像:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
RowData *rowObject = self.objects[indexPath.row];
rowObject.selected = !rowObject.isSelected;
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
同样,您的编译器警告/错误无疑源于源代码中的其他问题,因为您的原始代码片段在语法上是正确的。我只是想纠正你的一个不同的缺陷didSelectRowAtIndexPath
。在 MVC 编程中,您确实希望确保更新模型(然后更新视图),而不仅仅是更新视图。
但是,需要明确的是,如果您不纠正导致当前编译器警告/错误的错误,那么无论您在didSelectRowAtIndexPath
. 您必须确定编译器为何对您当前的代码犹豫不决。