2

選択時にviewControllerをスタックにプッシュするセルを持つUITableViewがあります。子の viewController はユーザー入力を受け取り、スタックからポップします。

子のviewControllerがポップされたら、親のtableViewで選択したセルの値を更新し、行の選択を解除します。reloadData を使用してセルを更新でき、deselectRowAtIndexPath を使用して行を選択解除できますが、両方を同時に行うことはできません

これがなぜなのか理解しています.reloadDataはセルを暗黙的に選択解除し、deselectRowAtIndexPathはセルを明示的に選択解除しますが、同じリロード/選択解除動作を実現したい人が見つからないのは不思議です. ここで何が欠けていますか?

すべてのコードは viewWillAppear:animated にあります - deselectRowAtIndexPath を viewWillAppear に、reloadData を viewDidAppear に配置すると、近づくことができますが、これは私が望むものではありません。

4

2 に答える 2

8

セルをリロードすると、自動的に選択が解除されます。これは、セルのselectedプロパティをYESin に設定していないためですtableView:cellForRowAtIndexPath:。したがって、これを別の方法で処理する必要があります。セルがindexPath必要であることを特定し、そのプロパティをin にselected適切に設定するか、データをリロードした後にセルを選択します。このような場合、次のメソッドを実行できます–</p> selectedYEStableView:cellForRowAtIndexPath:

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

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

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

ステップの順序は次のとおりです。

  1. アニメーションなしで行をリロードします。
  2. アニメーションなしで行を選択します。
  3. アニメーションで行を選択解除します。

そうすれば、あなたが望む効果を得ることができると思います。

于 2011-06-24T01:45:29.730 に答える
0

ユーザーが最初に行をタップして編集可能なビュー コントローラーをロードするときは、編集可能なビュー コントローラーをロードする前に UITableViewCell の選択を解除します。

于 2011-06-24T01:34:19.460 に答える