我有一个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]; }
}
答案 0 :(得分:0)
不要使用indexPath。在数据数组中的每个项目上设置标记值,然后为“checkedArray”保留标记列表。这样,您可以独立于单元格或tableView结构评估已检查的项目。