2

2 つのビュー コントローラーがあります。簡単に理解できるように、単に A と B と呼びます。

ビュー コントローラーには、ストーリーボード (手動でコーディングされていない) によって B にリンクされたボタンがあります。そして、BビューコントローラーはviewDidLoadメソッドでDBサーバーからjsonデータの束を取得します。json データの取得には時間がかかるため、アクティビティ インジケーターを追加して、ユーザーが何かを実行していること (凍結していないこと) を知らせる必要があります。ただし、アクティビティ インジケーター ビューをどこに追加すればよいかよくわかりません。

あなたが私の立場なら、どこに追加しますか?

4

3 に答える 3

2

通常のインターフェースビルダーを使用して、表示したい場所に配置し、hidesWhenStopped変数を に設定しYESて、データの取得が完了した後に表示されないようにします。次に、JSON コールバックで停止するように指示します。

設計に関して言えば、「完了」とは、ロードされているものの真ん中に置くことです。画像の場合、これは画像が表示される場所の中央になります。テーブルの場合、画面の中央または空の「プレースホルダー」セルにある大きなアクティビティ インジケーターを使用できます。必要なデータを表示しようとするユーザーの目がどこに移動するかを考え、そこにインジケーターを表示する必要があります。

于 2012-12-17T17:13:29.393 に答える
1

viewDidLoadにブロッキング呼び出しがあり、Bに移動する前にAでUIがフリーズする場合は、Aにアクティビティインジケーターを追加することをお勧めします。DBへのブロッキング呼び出しのために、UIがすぐに変更されることに気付くかもしれません。ブロッキング呼び出しもフリーズする前に、UIの変更は表示されません。

私が通常これを処理する方法は、ブロッキング呼び出し用に新しいスレッドを生成してUIのメインスレッドを解放し、必要に応じてアクティビティインジケーターを追加することです(AまたはBはデザインによって異なりますが、この中でBに表示することをお勧めしますユーザビリティPOVからのケース)。

これらすべてを自分で管理する煩わしさを避けるために、私は通常、MBProgressHUDなどの管理がはるかに簡単なライブラリを使用することになります。

于 2012-12-17T18:03:16.633 に答える
1

タイトルにメッセージを含むアラート ビューを使用してから、アクティビティ インジケーターであるアラートにサブ ビューを追加します。

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Doing something\nPlease Wait..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[alertView show];
indicator.center = CGPointMake(alertView.bounds.size.width / 2, alertView.bounds.size.height - 50);
[alertView addSubview:indicator];
[indicator startAnimating];

後でコードで却下します...

[alert dismissWithClickedButtonIndex:0 animated:YES];
于 2012-12-17T17:13:59.440 に答える