2012-04-26 4 views
3

詳細ビューから戻すときに前回選択したセルまたはユーザーがアイテムを作成したときに新しく追加されたセルの選択を解除するテーブルビューがあります。リロードテーブルビューのデータとセルの選択解除

ただし、新しい項目が追加されることがあるので、reloadDataviewWillAppear:に呼び出してテーブルをリフレッシュします。これは、たとえ私がself.clearsSelectionOnViewWillAppear = NOを持っていても、ビューが表示されてもセルが選択されていないことを意味します。

後の細胞を選択すると、選択解除して、テーブルビューは(viewDidAppear:で)ディセレクトアニメーションのタイミングを表示されます(あなた自身のためにしてみてください、それは遅くだと滑らかなように感じていない)ユーザーに目に見えて異なっています。

テーブルビューを更新した後でも選択を保持する方法はありますか? (状況に応じて、以前に選択したセルまたは新しく作成されたセルの選択を解除することを念頭に置いてください)どういうわけか、テーブル内のデータを別の方法で再ロードする必要がありますか?

答えて

6

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPathメソッドからNSIndexPathを保存し、ビューの再読み込み時にその行の選択を解除することができます。

これを行うための別の方法はUIViewControllerあなたが作成していると、そのUIViewControllerがポップされたときに、あなたが特定の行の選択を解除するNSIndexPathと現在のUITableViewControllerを渡すことである可能性があります。

新しい項目が作成されたら、indexPathのrow要素に1を追加して、右側の行の選択を解除します。

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
         withRowAnimation:UITableViewRowAnimationNone]; 

[self.tableView selectRowAtIndexPath:indexPath 
          animated:NO 
         scrollPosition:UITableViewScrollPositionNone]; 

[self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 
+0

感謝を返信するために:

また、変更されている行のみをリロードできます。方法1の場合、行の選択を解除するメソッドはどこに追加する必要がありますか?私が言及したように、 'viewDidAppear:'でそれを追加することは、標準のビヘイビア(連絡先アプリ)よりも目に見えるように見えます(アニメーションの選択解除は遅くなります)。 テーブルビューコントローラの 'viewWillAppear:'で 'reloadData'を呼び出すため、メソッド2が動作しません。ユーザーには、選択解除アニメーションが表示されません。 テーブルビューでデータを更新する方が良いですか?更新されたデータを表示する必要があるだけでなく、選択解除のアニメーションも必要です。 – James

+0

テーブル全体ではなく変更された行だけをリロードするとどうなりますか? –

+1

私はより多くの情報で私の答えを更新しました。 –

関連する問題