5

我正在编写一个 iOS 应用程序,我必须显示一个带有微调器的 UIAlertView。有时,当我尝试在警报中心添加微调器时会出现问题,通常是在此之前有另一个警报(不完全是规则,但这就是我注意到它失败的原因)。

我通过延迟微调器的创建部分解决了这个错误。这是我的做法(alert是 UIAlertView 的成员):

此代码在 viewDidLoad 中:

alert = [[[UIAlertView alloc] initWithTitle:@"Loading..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles: nil] autorelease];

[alert show];

[self performSelector:@selector(addSpinner) withObject:nil afterDelay:0.5f];

这是我的addSpinner函数:

- (void) addSpinner{

    UIActivityIndicatorView *indicator2 = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    indicator2.center = CGPointMake(alert.bounds.size.width / 2, alert.bounds.size.height - 50);

    [indicator2 startAnimating];
    [alert addSubview:indicator2];
    [indicator2 release];
}

这个解决方案每次都有效,但我真的不喜欢它是如何完成的。即使在警报弹出半秒后显示微调器并没有那么令人不安,但必须有更好的方法来处理这个问题。我不是iOS专家,也不是高级程序员,但我不能使用事件吗?像“当实际显示警报时,使用 addSpinner 函数”之类的东西?我不知道如何做到这一点,在网上找不到太多帮助......

希望可以有人帮帮我 !谢谢。

4

4 回答 4

5

您可以改用https://github.com/jdg/MBProgressHUD

对于警报中的微调器,您可以使用这些方法。

-(void)startLoading
{
    alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Please Wait..." delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];

    UIActivityIndicatorView *progress= [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(125, 50, 30, 30)];
    progress.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
    [alert addSubview:progress];
    [progress startAnimating];
    [progress release];
    [alert show];
}
-(void)stopLoading
{
    [alert dismissWithClickedButtonIndex:0 animated:YES];
    [alert release];
}
于 2012-07-10T07:39:48.530 回答
4

基本上问题看起来是在显示 UIAlertView 之前添加 UIActivityIndi​​cator 。尝试使用 UIAlertView Delegate 方法添加指示器,如下所示。

//AlertView delegate methods
- (void)didPresentAlertView:(UIAlertView *)alertView
{
    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

    indicator.center = CGPointMake(alertView.bounds.size.width/2, alertView.bounds.size.height/3 * 2);

    [indicator startAnimating];
    [alertView addSubview:indicator];
}
于 2013-02-09T11:55:45.313 回答
2

尝试这个

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
megaAlert = [[[UIAlertView alloc] initWithTitle:@"Please wait..."
                                                         message:nil delegate:self cancelButtonTitle:nil
                                               otherButtonTitles: nil] autorelease];
[megaAlert show];
indicator = [[UIActivityIndicatorView alloc]                                                      initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
            indicator.center = CGPointMake(megaAlert.bounds.size.width / 2,                                            megaAlert.bounds.size.height - 45);
[indicator startAnimating];
[megaAlert addSubview:indicator];
[indicator release];

要关闭指标,请使用此代码

[megaAlert dismissWithClickedButtonIndex:0 animated:YES];
megaAlert = nil;
[indicator stopAnimating];
于 2012-07-10T07:49:52.847 回答
1

还要记住在主线程中关闭警报:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.alert dismissWithClickedButtonIndex:0 animated:YES];
});
于 2012-11-12T13:08:45.790 回答