UITableViewCellAccessory多个部分

时间:2013-05-01 16:41:52

标签: ios objective-c uitableview

我正在尝试在用户选择时向UITableViewCell添加复选标记。我有以下代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{    
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if (selectedCell.accessoryType == UITableViewCellAccessoryNone) {
        selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

该表有多个部分,问题是如果我选择一行,则复选标记会在不同部分的其他行中重复。当您向上和向下滚动页面时,复选标记也会在每个部分的行之间移动。我已设法循环遍历表并记录有多少行具有附件复选标记,并且每次它应该是它应该是的数字,它不计算在没有我意义的情况下添加的其他行。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

当您在视图中向上和向下滚动时,UITableView正在重复使用您设置为选定的单元格。

正确的方法是跟踪模型对象中的选择,或签入tableView:cellForRowAtIndexPath:以查看indexPath是否在表格视图的indexPathsForSelectedRows中,并且仅显示该情况下的复选标记。因为为重用和新创建的单元格都调用cellForRowAtIndexPath:,所以在任一场景中都不应该遇到此问题。

这假设您已将tableView.allowsMultipleSelection设置为YES


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = // do some initing here

    // determine if this cell is currently selected
    if ([tableView.indexPathsForSelectedRows containsObject:indexPath]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
}