5

ここでいくつかの助けをいただければ幸いです。

画像 (緑、オレンジ、または赤) と異なるフォント サイズの 2 つのラベルで構成されるカスタム UITableView セルがあります。UITableView は、オブジェクトの NSMutableArray によって駆動されます。

UITableView は 3 つのセクションに分割されます。最初のセクションにはすべてのセルが含まれ、赤い画像が表示され、2 番目のセクションにはオレンジ色の画像が表示され、3 番目のセクションには緑色の画像が表示されます。

UITableView 内のセルを再配置する機能を実装しました。これにより、ユーザーは赤い画像のアイテムを赤いセクションからオレンジのセクションにドラッグできます。このドラッグはうまく機能し、基になるデータは正しく更新されます。セルを選択すると、その詳細ビューに移動し、データが更新されるため、これが事実であることはわかっています。

ただし、UITableView は、詳細に移動 (またはアプリを終了) して戻るまで更新されません! また、問題のあるセルをスクロールしてビューから外し、再びビューに戻すと更新されるため、配列には明らかに正しいデータが含まれています。ビューの更新をトリガーできません。

moveRowAtIndexPath の基になるデータを変更するためのコードの後に​​、次のことを試しました。

[self.tableView reloadData];

ただし、これにより例外が発生します。実際、Apple 言語リファレンスには、挿入、削除、またはアニメーション化するときに reloadData を呼び出すことはできないと書かれていますが、これはもちろん私が行っていることです。さらに、セルをリフレッシュしようとするだけです

[self setNeedsDisplay];

動作しません (クラッシュもしませんが)。

UITableView を更新する方法についてのアイデアはありますか? afterMoveHasBeenCompleted: メソッドなどが見つからないので、moveRowAtIndexPath: メソッドの実行中に reloadData を呼び出せない場合は、どこで呼び出せばよいのでしょうか?!

4

2 に答える 2

4

とった!!

解決策は、更新コードに遅延を挿入することであることがわかりました。これにより、クラッシュが防止されました。

reloadData 呼び出しを別のメソッドに入れました。

- (void)refreshDisplay:(UITableView *)tableView {
[tableView reloadData]; }

次に、0.5 秒の遅延で呼び出します。

[self performSelector:(@selector(refreshDisplay:)) withObject:(tableView) afterDelay:0.5];

そして、それはクラッシュせず、代わりにリフレッシュされました! 0.5 秒の遅延はほとんど目立たず、まったく問題ありません。

これが他の誰かに役立つことを願っています!

ありがとう

フィル

于 2009-05-11T11:57:17.133 に答える
2

UITableViewDelegate のリファレンスを見てください。UITableView にデリゲートを割り当てると、そのメソッドを使用して、テーブル ビューが何かを実行したという通知を処理できます。おそらく次のいずれかを使用します。

tableView:didEndEditingRowAtIndexPath:
また
tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:
これを達成するために。

于 2009-05-10T00:08:19.163 に答える