UITableView的AccessoryView在多个单元格上重用

时间:2015-12-10 17:34:17

标签: ios objective-c uitableview accessoryview

我有一个TableView,我想在点击时为行添加一个复选标记。为此,我有:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

        NSString *selectedCountry = [self.files objectAtIndex:indexPath.row];
        NSString *Documents = [[NSBundle mainBundle] pathForResource:selectedCountry ofType:@"ppt" inDirectory:@"thepowerpoints"];
        //NSLog(@"%@", selectedCountry);
        UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];

        if (newCell.accessoryType == UITableViewCellAccessoryNone) {
            if (self.chosen == nil) {
                self.chosen = [[NSMutableArray alloc] init];
            }
            newCell.accessoryType = UITableViewCellAccessoryCheckmark;
            [self.chosen addObject:Documents];
             NSLog(@"%@", self.chosen);

        }else {
            newCell.accessoryType = UITableViewCellAccessoryNone;
            [self.chosen removeObject:Documents];
        }

        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];


}

我知道这是由于Cell的类型dequeueReusableCellWithIdentifier而发生的。我的问题是,我可以改变什么,一旦它们开始被重用,只有被点击的行得到复选标记,而不是所有其他单元格?

1 个答案:

答案 0 :(得分:2)

将决定是否应检查单元格的代码移动到cellForRowAtIndexPath中。保持对当前所选索引/项目的引用,然后在该单元格上设置复选标记。您可以设置未选择的单元格以将附件视图设置为none。