不同部分中的所有tableCells都选择了相同的行(使用NSIndexPath)

时间:2013-04-05 05:03:12

标签: iphone ios objective-c

我尝试通过以下方式创建一个简单的清单样式tableView:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([_selectedRows containsObject:indexPath]) {
        [_selectedRows removeObject:indexPath];
        [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
    } else {
        [_selectedRows addObject:indexPath];
        [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
    }
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

然而,当我选择第一个项目并滚动时,我发现同一部分中的所有第一个项目除了它之外还有checkMark。 NSIndexPath不包含行和节吗?是什么让所有项目都被选中了? :(

谢谢!


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER];

if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_IDENTIFIER];
}

if ([_selectedRows containsObject: indexPath]) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

ABRecordRef selectedFriend = CFArrayGetValueAtIndex(_allFriends, [indexPath row]);
NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(selectedFriend, kABPersonFirstNameProperty));
NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(selectedFriend, kABPersonLastNameProperty));
cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", firstName, lastName];

return cell;

}

2 个答案:

答案 0 :(得分:1)

由于细胞重复使用,您还必须在必要时删除复选标记附件(在cellForRowAtIndexPath中):

if ([_selectedRows containsObject: indexPath]) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
    cell.accessoryType = UITableViewCellAccessoryNone;
}

答案 1 :(得分:0)

您需要为未选择的行将附件设置为UITableViewCellAccessoryNone,因为出列的行将保留其附件。

// put this in your cellForRowAtIndexPath method
if ([_selectedRows containsObject: indexPath]) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else {
    cell.accessoryType = UITableViewCellAccessoryNone;
}