0

データソースが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];        }
}
4

1 に答える 1

0

indexPath を使用しないでください。データ配列の各アイテムにタグ値を設定し、「checkedArray」のタグのリストを保持します。そうすれば、セルまたは tableView 構造に関係なく、チェックされた項目を評価できます。

于 2012-11-12T21:40:09.900 に答える