1

コンテナ ビューを持つ viewController があります。コンテナー ビューには、静的セルを含む tableView があります。各セルには開示インジケータがあります。これはすべて IB で作成されました。親の viewController は、navigationController に埋め込まれています。

各セルは、mapView をロードする新しいビュー コントローラーをプッシュします。各マップは、.kml ファイルを解析して読み込みます。.kml ファイルは巨大で、読み込みに 1 分 (またはそれ以上) かかります。

次のコードを使用して、各セルのアクセサリ ビューに activityIndi​​cator を配置しました。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

UIActivityIndicatorView *activityView =
[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[activityView startAnimating];
[cell setAccessoryView:activityView];

[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];}

これは期待どおりに動作するようです。

マップを表示した後、navigationController が提供する「戻る」ボタンをタッチして、マップをスタックからポップします。埋め込まれた tableView が再び表示され、アクティビティ インジケーターがまだ回転しています。私はそれを止めることができません。

私の最善の試みは、私のtableViewの実装ファイルでした:

- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[[self tableView] reloadData];}

しかし、それはうまくいきませんでした。助言がありますか?

4

1 に答える 1

1

reloadDataテーブルビューコントローラーの呼び出しは、メソッドviewWillAppear内である限り機能します。回転してはならないセルのメソッドを呼び出して(または単にビューから削除して)cellForRowAtIndexPath状態を設定しています。UIActivityIndicatorViewstopAnimating

プロパティを介してアクティビティ インジケーターを参照する必要がありaccesstoryViewます。

データに、そのマップに対してインジケーターがまだ回転しているかどうかを示すプロパティを格納し、適切に設定することができます。

もう 1 つの方法はprepareForSegue、マップ ビューを表示する直前に、 でアクティビティ インジケータを停止することです。

于 2013-08-19T17:15:24.347 に答える