データソースが400個の静的アイテムを含む配列であるtableViewがあります。私のアプリでは、行を選択すると、その行にチェックマークが付きます。チェックされた項目の indexPaths を別の配列で追跡しているので、後でテーブルを再ロードでき、それらの項目は引き続きチェックされます。
私のテーブルには多くの値があるので、searchDisplayController を追加しました。探しているものを入力し始めると、リストがそれらの項目に絞り込まれます。searchResultsTableView で行を選択すると、400 の静的行を含むメイン テーブルと同様に、それらがチェックされます。ただし、問題があります。
検索を入力して、400 項目のリストを探している項目に絞り込み、それを選択 (チェックマーク) したとします。400 項目の完全なリストでは、検索した項目はリストの 112 番である可能性があります。フィルタされたリストに表示される唯一の項目であるため、項目 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]; }
}