我有一个 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]; }
}