UITableView,隐藏区域中的另一个单元格具有复选标记,而触摸可见区域中的单元格

Ton*_*ony 2 objective-c uitableview ios

这是我的代码,它显示了14行表视图的问题.对于一个屏幕,可以看到6个单元格.

当我点击第二个单元格时,10个单元格也有一个复选标记,点击第3个,然后是第11个选中标记,第1个然后是第9个选中标记,点击第1个,然后第8个也被勾选...但是灰色突出显示不像这样,只有一个单元格可以突出显示.

如果我在同一个屏幕上点击一个单元格后点击一个单元格,那么刚检查标记的单元格将被清除以进行复选标记,这是有道理的.但是,如果我点击一个单元格,然后将桌面视图向下滚动,我可以点击一个单元格,它也会显示复选标记,即刚刚在顶部屏幕上检查的单元格仍然有一个复选标记.因此,如果我向上和向下滚动,每次滚动到另一侧后点击一个单元格,我可以为每个单元格添加一个复选标记,所有复选标记都会显示.

这真的很奇怪,我已经尝试了很多方法来解决它,但似乎我对UITableView失踪有一些基本的了解,有人能想出来吗,拜托?谢谢.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID= @"UITableViewCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }

    cell.imageView.image = [UIImage imageNamed:@"earth.png"];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath   *)indexPath
{
    UITableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];    
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryNone;
}
Run Code Online (Sandbox Code Playgroud)

Sto*_*nz2 5

您不会在任何类型的持久数据源中存储/不存在您的复选标记并显示/隐藏它cellForRowAtIndexPath.正因为如此,你的桌子正在重复使用你的单元格,而它只是在发现它时抛出它.因此,如果它重新使用启用了checkmark附件的单元格,则会将其显示为已启用(因为您没有专门禁用它cellForRow)

我会保留NSMutableArray一些选定的indexPath对象.添加indexPathdidSelectRowAtIndexPath,并在将其删除didDeselectRowAtIndexPath.然后,在cellForRowAtIndexPath,检查indexPath阵列中是否存在当前电流并启用复选标记,如果不是,则禁用.