0

AddressBook の連絡先を表示する UITableView があります。複数選択編集スタイルを有効にしています。tableView を表示すると、意図したとおりに機能します。ユーザーが行をタップすると、セルの左側にある赤いチェックマークが入力されます。すばらしい。

これらの選択内容を、表示中のビュー コントローラーの配列プロパティに保存します。テーブルを再度表示するとき、これらのセルが選択されたままになるようにします (つまり、青色のハイライトではなく、赤色のチェック マークがまだ塗りつぶされているだけです)。cellForRowAtIndexPath: そのインデックス パスにあるセルのオブジェクトを取得し、表示中のビュー コントローラーの配列にそのオブジェクトが含まれているかどうかをテストし、含まれている場合は[cell setSelected:YES];

これにより、ユーザーがセルに触れたときと同じ選択された外観になるはずです (赤いチェックマークのみ)。代わりに、赤いチェックが塗りつぶされますが、セルが一時的に青く強調表示され、テキストが永久に白くなり、連絡先の名前が消えたような印象を与えます. 役に立ったら喜んでコードを投稿しますが、これは誰かがよく知っている UITableView の癖のように思えますか? 編集:この画像は、私が持っている(そして欲しい)チェックマークの種類を示しています。[cell setSelected:YES]; を呼び出すと、なぜつなぎ合わせることができません。タッチに反応する場合とは異なる動作をします。ここに表示されているのは、[cell setSelected:YES]; を呼び出した後です。そして、それはほとんど私が望むように見えますが、名前は消えてしまいました. そして、私はしません

ここに画像の説明を入力

4

2 に答える 2

0

これは解決されました。cellForRowAtIndexPath で setSelected を試みて、自分自身で問題を起こしていたと思います。たぶん、テーブルビューのセルの再利用が狂ったように振る舞っていたのでしょうか?

複数選択スタイルのテーブルのプレゼンテーション間でセルを正しく選択するための解決策は、選択したインデックスを viewWillDisappear に格納することでした。提示ビュー コントローラーにプロパティNSArray *selectedIndexesを指定し、viewWillDisappear で呼び出した

[self.presentingViewController setSelectedIndexes:[myTableView indexPathsForSelectedRows]];

次に、viewWillAppear で、その配列を ivar に入れ、それを反復処理して呼び出すと、うまくいきました[myTableView selectRowForIndexPath:[selectedIndexes objectAtIndex:i] animated:YES]; 。コメントをくれた user523234 に感謝します。正しい軌道に乗って考えるのに役立ちました。

于 2012-05-09T17:37:56.227 に答える
0

あなたが探している視覚効果を私が理解していればcell.accessoryType = UITableViewCellAccessoryCheckmark;[cell setSelected:YES];.

于 2012-05-08T22:48:43.337 に答える