0

この質問に似ています:サブビューを追加すると、遅れますか? しかし、別のスレッドでViewControllerをプッシュできるとは思わないので、これは本当に不可能ですか?

これが私がやろうとしていることです:

TableView があり、セルが押されたときに呼び出したい

[self.view addSubview:LoadingView]

スピナーでオーバーレイを表示します。それから私は電話します

self.navigationController.navigationBar.hidden = NO;
[self.navigationController pushViewController:newGameViewController animated:YES];

ただし、サブビューは一瞬だけ表示されます (新しいビューコントローラーが初期化されるのを待つ間、セルの選択が発生してから約 1 ~ 4 秒後)。

セルが選択された瞬間に何らかの読み込みインジケータを表示する方法はありますか?

4

3 に答える 3

1

またはその逆:newGameViewControllerはスピナーを表示し、バックグラウンドスレッドでサーバーからのデータのロードを開始します。データが完成したら、スピナーを取り外してデータを表示します。そうすれば、ユーザーは待ちたくない場合でも戻ることができます。

于 2012-08-12T16:36:13.787 に答える
1

newGameViewControllerをプッシュする前にコードを追加する必要はありません。

newGameViewControllerのviewDidLoad内に、スピナーを表示するコードを記述します。更新されたUIを取得するには、WebAPIを呼び出す前に遅延を挿入するだけです。

GameViewController.m内

-(void) viewDidLoad
{
    [self.view addSubview:LoadingView];
    [self performSelector:@selector(callWebAPI) afterDelay:0.1];
}

-(void) callWebAPI
{
    //Handle network activity here..
}
于 2012-08-12T16:36:44.797 に答える
1

わかった。これはどうですか。didSelectRowAtIndexPath でスピナーを開始し (addSubview ... を介して)、サーバーからの読み込みを開始します。それが完了したら、スピナーを削除し、新しいビュー コントローラーをスタックにプッシュします。その間、ユーザーが他のセルに触れないようにしてください。ところで。ユーザーの観点からは、新しいコントローラーがすぐにロードされ、待機中のメッセージが表示された方がより直感的だと思います。

于 2012-08-12T16:28:28.100 に答える