2

私はこの奇妙な状況を経験しています。UITableViewがあり、ユーザーがセルを選択すると、長い(ネットワーク)プロセスが開始されます。そのため、これをバックグラウンドスレッドで実行し、(didSelectRowAtIndexPathに)UIActivityIndi​​catorViewをアクセサリビューとして配置しました。これは私が書いたものです:

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
UIActivityIndicatorView* activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
cell.accessoryView = activityView;
[activityView startAnimating];
[activityView release];

ロードプロセス中(インジケーターがアニメーション化されているとき)にUITabBarを使用してビューを切り替えた場合、UITableViewに戻ったときに、まだ存在しているはずのUIActivityIndi​​catorViewが消えていることを除いて、すべてが正しく機能しているようです。私が間違ったことについて何か考えはありますか?ありがとう!

4

2 に答える 2

2

私はこの問題を振り返っていました、そして...今質問を読んだ後、私は笑っています:-)私自身の質問への答えは:コードに問題はなく、それは非常にうまく機能します...しかしUIActivityIndi​​catorViewを作成します白...白い背景で見づらくなります:-D:-D投稿されたコードは正しいです。

于 2011-02-20T23:35:01.567 に答える
1

別のタブに移動してからテーブルビューに戻ると、テーブルcellForRowAtIndexPath:のセルを表示するメッセージがテーブルビューコントローラに送信されますが、アクティビティインジケータビューはdidSelectRowAtIndexPath:メソッドのセルのアクセサリビューとして設定されています。したがって、基本的に、セルが選択されたときにセルを変更しました(つまり、アクティビティインジケータービューを表示しました)が、ビューを離れて戻ったときに、このcellForRowAtIndexPath:メソッドを使用してセルを再表示しました(したがって、アクティビティインジケータービューはありません)。 )。

現在どのセルにアクティビティインジケータービューがあるかを追跡し、cellForRowAtIndexPath:メソッドのUIActivityIndi​​catorViewを使用してそれらのセルのアクセサリビューを設定していることを確認する必要があります。明らかに、セルに関連付けられたアクティビティが完了した場合は、そのセルのアクティビティインジケータービューを表示しないため、アクティビティがまだ完了したかどうかを追跡する必要があります。これを行うには多くの方法があるため、状況に最適な方法を決定する必要があります。

cellForRowAtIndexPath:別のタブビューからテーブルビューに戻るときにメッセージが(少なくとも必然的に)送信されるというのは真実ではないので、上記の答えを「削除」しました。

于 2011-01-09T23:51:18.713 に答える