我想在 UIAlertView 上显示 UIProgressView

Posted

技术标签:

【中文标题】我想在 UIAlertView 上显示 UIProgressView【英文标题】:I want to display UIProgressView on UIAlertView 【发布时间】:2012-07-26 12:47:19 【问题描述】:

以显示文件上传的处理过程。但是我搜索了太多,并且在该链接上也找到了,但仍然无法做到这一点。 I don't get idea from this

如果有人知道最简单的方法,请告诉我。

【问题讨论】:

很难超越一本书的解释 - 它几乎包含您需要的所有代码,只需耐心地按照本章进行操作,您应该会到达那里。 如果你知道如何使用 UIProgressView 那就很简单了。将 progessview 作为子视图添加到警报中。 【参考方案1】:

我在执行此操作时遇到了问题,结果如下:

av = [[UIAlertView alloc] initWithTitle:@"Running" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];
progressView.frame = CGRectMake(0, 0, 200, 15);
progressView.bounds = CGRectMake(0, 0, 200, 15);
progressView.backgroundColor = [UIColor blackColor];

[progressView setUserInteractionEnabled:NO];
[progressView setTrackTintColor:[UIColor blueColor]];
[progressView setProgressTintColor:[UIColor redColor]];
[av setValue:progressView forKey:@"accessoryView"];

[av show];

【讨论】:

这是唯一适合我的解决方案。使用ios7【参考方案2】:

试试这个代码...

UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"" message:@"" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
UIProgressView *pv = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];
pv.frame = CGRectMake(20, 20, 200, 15);
pv.progress = 0.5;
[av addSubview:pv];
[av show];

【讨论】:

我也可以在警报视图上显示上传百分比和进度视图吗? 是的,就像您添加了进度视图一样添加 A UILabel 并将其值更改为百分比 @InderKumarRathore:我对此有疑问,因为 Apple 不鼓励在警报视图中添加 UITextField,他们是否允许添加进度视图?我做了同样的事情,不同之处在于我使用了 YLProgressBar 但想知道它是否会被 Apple 接受。 @Yogi 是的,他们没有,苹果还在警报视图中使用了UITextField 尽管 Apple 在警报视图中使用了文本字段,但他们不允许开发人员遵循相同的内容,因为我的一个应用程序因同样的原因被拒绝。【参考方案3】:

虽然这不能完全回答您的问题,但请尝试 MBProgressHud,这是一个内置此功能的第三方控件。 Github 上提供的示例应该可以让您快速上手。

【讨论】:

该死!我发布了同样的东西 :) 我个人使用 MBProgressHUD,因为我遇到了 UIAlertView 的问题。我主要使用模式“MBProgressHUDModeIndeterminate”,但我也喜欢“MBProgressHUDModeCustomView”,因为您可以在几秒钟内显示 HUD 并为用户提供信息。您可能正在寻找的模式是“MBProgressHUDModeDeterminate”或“MBProgressHUDModeAnnularDeterminate”。您绝对应该尝试 MBProgressHUD,我现在无法停止使用它。 :)【参考方案4】:

试试这个代码。将 YES 用于活动指示器,将 NO 用于 progressView

- (void) createProgressionAlertWithMessage:(NSString *)message withActivity:(BOOL)activity

 progressAlert = [[UIAlertView alloc] initWithTitle: message
 message: @"Please wait..."
 delegate: self
 cancelButtonTitle: nil
 otherButtonTitles: nil];


 // Create the progress bar and add it to the alert
 if (activity) 
 activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
 activityView.frame = CGRectMake(139.0f-18.0f, 80.0f, 37.0f, 37.0f);
 [progressAlert addSubview:activityView];
 [activityView startAnimating];
  else 
 progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(30.0f, 80.0f, 225.0f, 90.0f)];
 [progressAlert addSubview:progressView];
 [progressView setProgressViewStyle: UIProgressViewStyleBar];
 
 [progressAlert show];
 [progressAlert release];

【讨论】:

【参考方案5】:

为什么不使用alerviewdelegate方法

- (void)willPresentAlertView:(UIAlertView *)alertView

这样做的好处是我们可以看到警报视图在屏幕上的实际大小,因为 iOS 已经预先计算了这一点,所以不需要幻数 - 或覆盖 Apple 警告的类!

从 iOS7 开始,我记得从 Apple 那里读过一些文件说不要硬编码任何帧大小,而是始终从应用程序计算它们,或者类似的东西?

- (void)willPresentAlertView:(UIAlertView *)alertView

   CGRect alertRect = alertview.bounds;
   UIProgressView *loadingBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];
   loadingBar.bounds = CGRectMake(0, 0, alertRect.width, HEIGHT_YOU_WANT);
   //  Do what ever you want here to set up the alertview, as you have all the details you need
   //  Note the status Bar will always be there, haven't found a way of hiding it yet
   //  Suggest adding an objective C reference to the original loading bar if you want to manipulate it further on don't forget to add #import <objc/runtime.h>
   objc_setAssociatedObject(alertView, &myKey, loadingBar, OBJC_ASSOCIATION_RETAIN); // Send the progressbar over to the alertview

中拉取对加载栏的引用
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

然后使用

UIProgressView *loadingBar = objc_getAssociatedObject(alertView, &myKey);

记得定义过

#import <objc/runtime.h>
static char myKey;

在类声明的顶部

【讨论】:

【参考方案6】:

这是创建一个警报视图

UIAlertController* alert=[UIAlertController alertControllerWithTitle:@"Message" message:@"This is test" preferredStyle:UIAlertControllerStyleAlert];

现在添加文本字段

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField)
 
     textField.placeholder=@"Enter Text label";
     [textField setBorderStyle:UITextBorderStyleRoundedRect];
     textField.backgroundColor=[UIColor whiteColor];
 ];

并将其添加到视图中

[self presentViewController:alert animated:YES completion:nil];

【讨论】:

以上是关于我想在 UIAlertView 上显示 UIProgressView的主要内容,如果未能解决你的问题,请参考以下文章

显示 UIAlertView 时处理摇动手势

一段时间后如何显示 UIAlertView?

更改 UIAlertView 按钮布局

在 UIAlertView(iOS、Xamarin)上添加 UITextView,而不使用任何第三方库

UIAlertView 按钮操作

如何取消并从UIAlertView调用用户操作