我有一个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;
}
答案 0 :(得分:1)
我看到你在CellForRowAtIndexPath中犯了两个错误,它没有检查cell是否为null来创建一个并根据收件人列表为cell设置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;