2012-05-03 7 views
0

次のビューコントローラが「データ読み込み」であることをユーザーに警告する必要がある状況があります。アラートビューを挿入しても機能しない

私はFirstViewControllerボタンアクションにこれを追加しました:

- (IBAction)showCurl:(id)sender { 
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Please Wait" message:@"Acquiring data from server" delegate:self cancelButtonTitle:@"OK!" otherButtonTitles:nil]; 
    [alert show]; 
    SecondViewController *sampleView = [[SecondViewController alloc] init]; 
    [sampleView setModalTransitionStyle:UIModalTransitionStylePartialCurl]; 
    [self presentModalViewController:sampleView animated:YES]; 
} 

それは動作しません。 SecondViewControllerにロードされ、SecondViewControllerがロードされた後でのみポップアップします。

私はSecondViewController自体を試しました。 SecondViewControllerは、リモートサーバーからデータを抽出します。これは、インターネット接続に応じてダウンロードするのに時間がかかる理由です。だから、関数にUIAlertViewを追加することにしました:

これはうまくいきません。そして、それを上に置くために、インターネット接続がないことをユーザーに警告するために、2番目のアラートがポップアップするかどうかを調べるためにインターネット接続を試みました。 2番目のアラートは機能しません。

+0

代わりに 'UIActivityIndi​​catorView'を使用してみませんか?それはより多くのユーザーフレンドリーです。 – sooper

+0

あなたは私をどのように案内することができますか? –

答えて

1

質問の最初の部分については、メソッドUIAlertViewは現在のスレッドをブロックしないため、実行が継続され、実行している動作が期待されます。あなたがしなければならないのは、UIAlertViewDelegateのメソッドの1つを実装し、警告のdelegateプロパティをselfに設定することです。だから、アラートが却下されたら、SecondViewControllerを表示することができます。第二部のために


あなたは、バックグラウンドスレッドで実行あなたのqBlock方法を持っている場合、それはあなたが警告を再度表示されていない普通のことだ - あなたはUIが実行されているメインスレッドにアラートを表示する必要があります。これを行うには、以下をごelse文を変更します。

else 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"ALERT" message:@"Internet Connection cannot be established." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
    }); 
} 

をこの情報がお役に立てば幸いです。

+0

どこで最初のメソッドを実装しますか? FirstViewControllerのSecondViewControllerにありますか? –

+0

FirstViewControllerにあります。 showメソッドはUIAlertViewを表示し、アラートビューが終了すると(UIAlertViewDelegateメソッドの一部を実装し、アラートのデリゲートをselfに設定することでこれを捕捉できます)、SecondViewControllerを初期化して表示します。 – graver

+0

私はキャンセルボタンを設定すると達成できます。しかし、私が望むものはキャンセルボタンなしです。私はちょうどttを表示するためにポップアップ警告をしたい –

関連する問題