警报视图活动指示器显示时间

时间:2012-07-12 18:03:25

标签: ios xcode uialertview

我使用以下方式显示带有警报视图的活动指示器:

 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];

唯一的一点就是它快速从屏幕上消失了,我想指定警报停留在屏幕上多长时间,比如两秒,而不是现在显示的纳秒。我不确定如何去实现这个,我会使用某种NSTimer,如果有的话,一些建议如何实现这一点将非常感激。感谢。

1 个答案:

答案 0 :(得分:1)

以下是我如何使用NSTimerNSInvocation解决问题的示例。我没有测试过,所以可能会遇到一些麻烦。

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