0

UITableView単一選択モードで、4 つのセルがあります。-selectRowAtIndexPath:animated:scrollPosition:ビューが最初に読み込まれると、保存された設定に基づいて、セルの 1 つをプログラムで選択します。この後、ユーザーはテーブルを操作できます。

メソッド-tableView:willSelectRowAtIndexPath:-tableView:didSelectRowAtIndexPath:は、ユーザーがセルをタップするたびにテーブル ビュー デリゲートで呼び出されます。ただし、-tableView:willDeselectRowAtIndexPath:and -tableView:didDeselectRowAtIndexPath:(これは DEselect です) は、ユーザーが最初にプログラムで選択されたセルを手動でタップするまで呼び出されません。

なぜこれが起こっているのでしょうか?-[UITableView selectRowAtIndexPath:animated:]ユーザーがタップしたセルを除くすべてのセルを手動で呼び出す以外に回避策はありますか?

4

3 に答える 3

1

[UITableView selectRowAtIndexPath:animated:] を呼び出すのが早すぎて、UITableViewController を使用している場合は、おそらく UIViewController clearsSelectionOnViewWillAppear (デフォルトは YES) と競合しています。self.clearsSelectionOnViewWillAppear = NO; を設定してみてください。あなたのビューでDidLoad

于 2014-12-11T12:05:33.397 に答える
0

最初のデータ ソースの更新と-selectRowAtIndexPath:...呼び出しをラップしていました

[_tableView beginUpdates];
// ...
[_tableView endUpdates];

どうやら、のよう-reloadDataに、これは現在の選択をクリアします (それが仕様によるものかどうかはわかりません)。呼び出しを-selectRowAtIndexPath:...afterに移動した-endUpdatesところ、すべてが意図したとおりに機能するようになりました。

于 2013-07-01T20:17:36.343 に答える
0

これはコメントするには長すぎるので、これを回答として投稿します。

tableViewでテストプロジェクトを作成しました。呼び出し[UITableView selectRowAtIndexPath:animated:]viewDidLoad、セルを 1 つ選択しました。次に、別のセルを選択しています(最初のセルの選択を解除せずに)。

私はこの出力を持っています:

[SDTVTViewController tableView:willSelectRowAtIndexPath:]    
[SDTVTViewController tableView:willDeselectRowAtIndexPath:]    
[SDTVTViewController tableView:didDeselectRowAtIndexPath:]    
[SDTVTViewController tableView:didSelectRowAtIndexPath:]

そして、最初のセルの選択を解除し、2 番目のセルを選択しました。

なぜそれがあなたのコードで機能しないのか、私にはわかりません。電話をしているときに、実装したメソッド[UITableView selectRowAtIndexPath:animated:]のコードを投稿できますUITableViewDelegateか?

于 2013-07-01T17:08:09.027 に答える