2

我有一个带有动态原型的 UITableView。我实现了下面的代码,这样当我选择一行时,它将被标记,而之前选择的行将被取消标记。但是,例如,我选择的行显示在屏幕中间,然后当我向上或向下滚动时,另一个单元格(位于屏幕中间位置)被标记。简而言之,每一个视图,中间都有一个选中的单元格。请指教。

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *oldIndexPath = [self.tableView indexPathForSelectedRow];
    [self.tableView cellForRowAtIndexPath:oldIndexPath].accessoryType = UITableViewCellAccessoryNone;
    [self.tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
    return indexPath;
}
4

2 回答 2

0

您只是在修改单元格的视觉效果,而不是更新数据模型。将选定的索引路径存储在@property某处,并accessoryTypecellForRowAtIndexPath.

于 2013-10-08T15:37:17.417 回答
0

可能您在 cellForRowAtIndexPath 方法中覆盖了 accessoryType - 每次表即将绘制以前不可见的新行时都会调用此方法(如您在向上/向下滚动时所描述的那样)。

您还需要在该函数中处理它并在那里更新附件类型 - 否则它将随机重用具有不同附件类型的单元格。

于 2013-10-08T15:36:21.227 回答