无法在didSelectRowAtIndexPath中更新cellaccessory

时间:2014-01-06 17:42:36

标签: ios objective-c uitableview

我是iOS的新手,当用户选择一个单元格时,我遇到添加/删除单元accessoryTypeCheckmark的问题。我在UITableView中有一个朋友列表,用户应该可以选择多个朋友并在旁边显示一个复选标记。如果用户点击已经被选中的朋友,则复选标记应该消失。我正在跟踪在名为“friends_selected”的NSMutableArray中被选中的朋友。

我设置了cellForRowAtIndex路径以检查friends_selected数组是否包含用户名,如果是,则添加复选标记。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
FriendsListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

cell.usernameID.text = [self.friends_username objectAtIndex:indexPath.row];

if ([self.friends_selected containsObject:cell.usernameID.text]) {

    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else {

    cell.accessoryType = UITableViewCellAccessoryNone;
}

return cell;
}

在我的didSelectRowAtIndexPath中,我在friends_selected数组中添加或删除用户名并重新加载表数据。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
FriendsListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

cell.usernameID.text = [self.friends_username objectAtIndex:indexPath.row];  

if ([self.friends_selected containsObject:cell.usernameID.text]) {

    [self.friends_selected removeObject:cell.usernameID.text];
}
else {

    [self.friends_selected addObject:cell.usernameID.text];
}
[tableView reloadData];
}

现在,friends_selected数组正在更新,选择或取消选择了哪些用户名。没有出现复选标记,但单元格在选中时将突出显示,即使未选中也会保持突出显示。任何帮助都会很棒,我整天都被困在这个看似简单解决方案的问题上。

1 个答案:

答案 0 :(得分:2)

didSelectRow...方法中,您应该替换:

FriendsListCell *cell = (FriendsListCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

使用:

FriendsListCell *cell = (FriendsListCell *)[tableView cellForRowAtIndexPath:indexPath];

您不需要新单元格,您需要所选行的实际单元格。

也不要拨打reloadData。要么直接更新单元格,要么只调用reloadData,而不是两者。