选择一个单元格错误地将其他几个单元格标记为“已选中”

时间:2015-10-02 14:13:20

标签: ios objective-c uitableview

在我的应用程序中,我有一个UITableView,它包含多个自定义UITableViewCells。在我的故事板中,我选中了Single Selection,因为我一次只想要一个选定的单元格。在我的ViewController中,我重写didSelectRowAtIndexPathdidDeselectRowAtIndexPath,如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
    TextsTableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
    selectedCell.backgroundColor = [UIColor blueColor];
    selectedCell.textLabel.textColor = [UIColor whiteColor];
    self.chosenTextId = [NSNumber numberWithInteger:[selectedCell tag]];
    self.chosenStaticText = [selectedCell.textLabel text];
    NSLog(@"The textID: %@ and the text: %@", self.chosenTextId, self.chosenStaticText);
}

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath*)indexPath {
    TextsTableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
    selectedCell.backgroundColor = [UIColor whiteColor];
    selectedCell.textLabel.textColor = [UIColor blackColor];
    self.chosenTextId = nil;
    self.chosenStaticText = nil;
}

只要我不滚动一切似乎工作正常(虽然我不能检查这个没有滚动)。我的日志只包含我单击的正确选择的单元格。但是当我向下滚动时,还有其他细胞被选中。有人知道可能出现什么问题吗?

1 个答案:

答案 0 :(得分:2)

这里的问题是你的UITableViewCell正在重复使用,这会保持状态,因此只有当你滚动时才会发生这种情况。您需要将所选单元格indexPath存储在NSMutableArray等存储集合对象中。然后在cellForRowAtIndexPath中,您可以检查是否应该选择单元格,如果是,请选择它,如果它不确定未选中。