2

以下を使用して、アラートビューでアクティビティインジケータを表示しています。

 UIAlertView *Alert= [[UIAlertView alloc] initWithTitle:@"Loading"
                                               message:@"\n"
                                              delegate:self
                                     cancelButtonTitle:nil
                                     otherButtonTitles:nil];

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];   
spinner.center = CGPointMake(139.5, 75.5); 
[Alert addSubview:spinner];
[spinner startAnimating];
[Alert show];    

[Alert dismissWithClickedButtonIndex:0 animated:YES];

唯一のことは、それが画面からすぐに消えることです。アラートが現在表示されているナノ秒ではなく、たとえば2秒間画面に表示される時間を指定したいと思います。これを実行/実装する方法がわからない場合は、ある種のNSTimerを使用しますか?そうであれば、これを実装する方法についてアドバイスをいただければ幸いです。ありがとう。

4

1 に答える 1

1

NSTimerと を使用して問題を解決する方法の例を次に示しNSInvocationます。私はそれをテストしていないので、問題があるかもしれません。

UIAlertView *Alert= [[UIAlertView alloc] initWithTitle:@"Loading"
                                               message:@"\n"
                                              delegate:self
                                     cancelButtonTitle:nil
                                     otherButtonTitles:nil];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];   
spinner.center = CGPointMake(139.5, 75.5); 
[Alert addSubview:spinner];
[spinner startAnimating];
[Alert show];  
NSMethodSignature *mySignature = [UIAlertView instanceMethodSignatureForSelector:@selector(dismissWithClickedButtonIndex:animated:)];
NSInvocation *myInvocation = [NSInvocation invocationWithMethodSignature:mySignature];
[myInvocation setSelector:@selector(dismissWithClickedButtonIndex:animated:)];
[myInvocation setTarget:Alert];
int buttonIndex = 0;
bool isAnimated = YES;
[myInvocation setArgument:&buttonClicked 
                  atIndex:2];
[myInvocation setArgument:&isAnimated 
                  atIndex:3];
NSTimer *t = [NSTimer scheduledTimerWithTimeInterval:2 
                                          invocation:myInvocation 
                                             repeats:NO];  

ただし、これが質問に対する最良の答えだとはまだ思いません。ほとんどの場合、時間に基づいてではなく、特に変更される可能性がある時間や他の要因に依存する時間ではなく、実行する作業が完了するまでインジケーターを使用する必要があります。

したがって、正しい答えは、作業が完了するまで待機し、その時点でUIAlertView.

于 2012-07-12T19:35:24.047 に答える