0

NSTableView 複数選択が有効になっている

アイテムを選択してリストを前後にスクロールすると、それらは記憶され、表示され、選択されます (青い背景)。を使用する didDeselectRowAtIndexPathdidSelectRowAtIndexPath 、選択したアイテムの独自の配列を保持できます。

その部分はうまく機能します。

ただし、次に を使用して文字にジャンプすると、選択 がリセットされて空になったように見えてsectionForSectionIndexTitle も、選択が忘れられているように見えます。indexPathForSelectedRows

私自身の配列は、アイテムが選択されたことを記憶しており、 cell.selected を設定できますがcellForRowAtIndexPath 、リストを移動した瞬間に再び忘れられます

これはバグですか、文字にジャンプするときに選択リストをどのように保持しますか?

前もって感謝します

4

3 に答える 3

1

UITableViewCells はデータを表示するためだけに存在し、必要に応じてキューに入れられて再利用されるため、「モデル」と 1 対 1 の関係を持つことはありません (つまり、テーブルビューに何千ものアイテムが表示されている可能性がありますが、割り当てられた UITableViewCell のほんの一握りのインスタンスのみ)。

そのため、変更可能な配列で選択/選択解除されたアイテムを追跡し、 tableView:cellForRowAtIndexPath: メソッドでそのアイテムの存在を確認してから、セル プロパティを更新してデータを表す必要があります。

于 2012-06-13T04:37:15.460 に答える
0

選択された行の値を使用するNSMutableArrayことで、テーブル内の選択された行を自分で追跡できる場合があります。-selectRowAtIndexPath:animated次に、配列内の最後のオブジェクトを呼び出して選択を復元するだけです。

バグに関しては、テーブルが選択された文字にジャンプするときに発生する可能性があるのは-reloadData、選択された行を忘れる迷走です。

于 2012-06-13T04:26:47.670 に答える
0

細胞が再利用されているからだと思います。セルを再利用しないでください (セルを効率的に使用していません)。それ以外は、

選択範囲を自分で配列に保存し、後で目的に使用できます。

于 2012-06-13T04:37:03.213 に答える