我使用以下方式显示带有警报视图的活动指示器:
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,如果有的话,一些建议如何实现这一点将非常感激。感谢。
答案 0 :(得分: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
。