didSelectRowAtIndexPath选择多个tableView单元附件

我有一个tableView,其中包含按字母顺序索引到部分和行的用户名列表。 当我点击一个部分中的一行时,正确的用户被添加到我的收件人数组中,并且复选标记是除了他们的名字之外的单元格中的位置..但是还有一个复选标记显示在尚未选择的其他用户名旁边不在收件人数组中。 我尝试使用新的indexPath重新分配所选单元格(请参阅下面的代码),但无法使其工作。 它注册了正确的路径,但不会分配它。 我使用类似的方法为用户分配每个部分中的行没有任何问题,但由于某种原因,附件标记给我带来了问题。 我已经看到一些关于同一主题的溢出的其他线程但是洗了;我能够为我的案例找到解决方案。 任何线索? 干杯!

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { int row = indexPath.row; int section = indexPath.section; NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:row inSection:section]; [tableView deselectRowAtIndexPath:newIndexPath animated:NO]; UITableViewCell *cell = [tableView cellForRowAtIndexPath:newIndexPath]; NSArray *array = [self.sectionsArray objectAtIndex:indexPath.section]; PFUser *user = [array objectAtIndex:indexPath.row]; if (cell.accessoryType == UITableViewCellAccessoryNone) { cell.accessoryType = UITableViewCellAccessoryCheckmark; [self.recipients addObject:user]; } else { cell.accessoryType = UITableViewCellAccessoryNone; [self.recipients removeObject:user]; } [self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { if (error) { NSLog(@"Error %@ %@", error, [error userInfo]); } }]; 

这是cellForRowAtIndexPath:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIdentifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // Get the user names from the array associated with the section index in the sections array. NSArray *userNamesInSection = (self.sectionsArray)[indexPath.section]; // Configure the cell with user name. UserNameWrapper *userName = userNamesInSection[indexPath.row]; cell.textLabel.text = userName.user; return cell; } 

正如我所看到的,你在CellForRowAtIndexPath中犯了2个错误,它没有检查cell是否为null来创建一个并根据收件人列表为单元格设置accessoryType。

你应该这样做:

 NSString *CellIdentifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } PFUser *user = [self getUserAtIndexPath:indexPath]; cell.textLabel.text = user.name; if ([self.recipients containObject:user]) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } return cell;