0

我有一个 tableView,它的数据源是一个包含 400 个静态项目的数组。在我的应用程序中,您可以选择一行,它将在该行上放置一个复选标记。我在另一个数组中跟踪检查项目的 indexPaths,以便以后可以重新加载表并且这些项目仍将被检查。

因为我的表中有很多值,所以我添加了一个 searchDisplayController。开始输入您要查找的内容,它会将列表过滤到这些项目。您可以在 searchResultsTableView 中选择行,它会检查它们,就像在具有 400 个静态行的主表中一样。但是,有一个问题:

假设您输入搜索并将 400 个项目的列表缩小到您要查找的项目,然后选择(复选标记)它。在 400 项的完整列表中,您刚刚搜索的项可能是列表中的第 112 项,但是当您进行搜索并过滤到仅一项时,而不是将第 112 项的 indexPath 添加到我的数组中轨道,它进入了项目 0 的 indexPath,因为它是过滤列表中唯一显示的项目。因此,当您取消搜索并返回主列表而不是第 112 项上的复选标记时,第 0 项上有一个复选标记。

所以我正在寻找一种方法来让我的过滤数组与我的主 tableView 数据源保持同步。

我的 didSelectRowAtIndexPath 方法的相关位:

if (tableView == self.searchDisplayController.searchResultsTableView) {
    cell.textLabel.text = [filteredattributesArray objectAtIndex:[indexPath row]];
    if(cell.accessoryType == UITableViewCellAccessoryNone){ 
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

        [selectedItemRows addObject:indexPath]; //Add the index path of checked cell into     array to keep track            

        [tableView reloadData];

    } else {
        if(cell.accessoryType == UITableViewCellAccessoryCheckmark) {
            cell.accessoryType = UITableViewCellAccessoryNone;

            [selectedItemRows removeObject:indexPath]; //Remove that index path of unchecked cell from index array

            [tableView reloadData];
        }
    }
    [tableView deselectRowAtIndexPath:indexPath animated:YES];        }
}
4

1 回答 1

0

不要使用 indexPath。在数据数组中的每个项目上设置标签值,然后为“checkedArray”保留标签列表。这样您就可以独立于单元格或 tableView 结构来评估选中的项目。

于 2012-11-12T21:40:09.900 回答