我尝试通过以下方式创建一个简单的清单样式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;
}
答案 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;
}