3

メール アプリに似た UI があります。1 列のアイテムを含む左側のテーブル ビュー。左側の項目のいずれかを選択すると、その項目の詳細が右側に表示されます。

左側のテーブル ビューのデータを再読み込みする必要があるイベントがアプリで発生すると、現在の選択が失われ、右側の詳細ビューと左側のマスター ビューが同期しなくなります。

この問題を解決したいと思っていた方法は、テーブル データをリロードするときに、次のことを行うことでした。 1. 現在選択されているアイテムを保存します。 2. テーブル データをリロードします。リロードが行われました。4. テーブル内の新しい項目リストで適切な項目を見つけて、再度選択します。

残念ながら、テーブルのリロードがいつ完了したかを判断する方法が見つかりません。ありますか。これを理解するための任意の方法、またはb。この問題に対するよりエレガントな解決策はありますか?

ありがとう。


更新: 私の問題が不明な場合は、メール アプリを使用していて、メッセージが選択されていると想像してください。その要約セルが左側に選択されて表示され、メッセージの詳細が右側に表示されます。テーブルの上部に新しいセルとして表示される新しいメールが届いたとします。現在表示しているメッセージはどのように保持され、選択解除されていませんか?

4

2 に答える 2

3

reloadDataハンマーのようなものです。10.7 は、より優れたソリューションを提供します。

追加する新しい行がある場合は、 reloadData を使用する代わりに を使用しますinsertRowsAtIndexes:withAnimation:。削除する行がある場合は、 を使用しますremoveRowsAtIndexes:withAnimation:。もちろん、既存の行が変更された場合は、reloadDataForRowIndexes:columnIndexes.

これらはあなたのために選択を覚えているはずです (少なくとも、iOS の同等のものはそうします)。

10.7 をターゲットにできない場合は、他の提案のいくつかがおそらく役立つでしょう。noteNumberOfRowsChangedも役立つかもしれませんが、実際には使用していません。

于 2012-11-22T00:39:40.280 に答える
0

を使用してセルを作成した直後に、選択を保存して行tableView(_:shouldSelectRow:)を選択できます。tableView(_:viewFor:row:)selectRowIndexes(_:byExtendingSelection:)

テーブルをどのように/いつ/何回リロードしても、かなり信頼できます。

于 2020-01-02T10:56:11.120 に答える