`

[转]如何在UIAlertView中显示进度条

 
阅读更多

今天这个问题是,在一个iPhone程序中,我要在后台做大量的数据处理,希望在界面上显示一个进度条(Progress Bar)使得用户了解处理进度。这个进度条应该是在一个模态的窗口中,使界

今天这个问题是,在一个iPhone程序中,我要在后台做大量的数据处理,希望在界面上显示一个进度条(Progress Bar)使得用户了解处理进度。这个进度条应该是在一个模态的窗口中,使界面上其他控件无法被操作。怎么用最简单的方法来实现这个功能?UIAlertView是一个现成的模态窗口,如果能把进度条嵌入到它里面就好了。

 

以下内容适用于iOS 2.0+。

我们知道,如果要显示一个alert窗口(比如用来显示错误或警告信息、询问用户是否确认某操作等等),只要简单地创建一个UIAlertView对象,再调用其show方法即可。示意代码如下:

1
2
3
4
5
6
7
UIAlertView* alertView = [[[UIAlertView alloc] initWithTitle:@"Title"
                                                     message:@"Message"
                                                    delegate:nil
                                           cancelButtonTitle:@"OK"
                                           otherButtonTitles:nil]
                          autorelease];
[alertView show];

如果要添加一个进度条,只要先创建并设置好一个UIProgressView的实例,再利用addSubbiew方法添加到alertView中即可。

在实际应用中,我可能需要在类中保存进度条的对象实例,以便更新其状态,因此先在自己的ViewController类中添加成员变量:

1
2
3
4
5
6
7
8
9
//  MySampleViewController.h
#import <UIKit/UIKit.h>

@interface MySampleViewController : UIViewController {
@private
    UIProgressView* progressView_;
}

@end

接下来写一个叫做showProgressAlert的方法来创建并显示带有进度条的alert窗口,其中高亮的部分就是把进度条添加到alertView中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (void)showProgressAlert:(NSString*)title withMessage:(NSString*)message {
    UIAlertView* alertView = [[[UIAlertView alloc] initWithTitle:title
                                                         message:message
                                                        delegate:nil
                                               cancelButtonTitle:nil
                                               otherButtonTitles:nil]
                              autorelease];

    progressView_ = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];
    progressView_.frame = CGRectMake(308022530);
    [alertView addSubview:progressView_];

    [alertView show];
}

为了让数据处理的子进程能够方便地修改进度条的值,再添加一个简单的方法:

1
2
3
- (void)updateProgress:(NSNumber*)progress {
    progressView_.progress = [progress floatValue];
}

另外,数据处理完毕后,我们还需要让进度条以及alertView消失,由于之前并没有保存alertView的实例,可以通过进度条的superview访问之:

1
2
3
4
5
6
7
8
9
10
11
12
13
- (void)dismissProgressAlert {
    if (progressView_ == nil) {
        return;
    }

    if ([progressView_.superview isKindOfClass:[UIAlertView class]]) {
        UIAlertView* alertView = (UIAlertView*)progressView_.superview;
        [alertView dismissWithClickedButtonIndex:0 animated:NO];
    }

    [progressView_ release];
    progressView_ = nil;
}

假设处理数据的方法叫processData,当然它会在一个单独的线程中运行,下面的片段示意了如何更新进度条状态,以及最后如何让它消失。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- (void)processData:(int)total {
    for (int i = 0; i < total; ++i) {
        // Update UI to show progess.
        float progress = (float)/ total;
        NSNumber* progressNumber = [NSNumber numberWithFloat:progress];
        [self performSelectorOnMainThread:@selector(updateProgress:)
                               withObject:progressNumber
                            waitUntilDone:NO];

        // Process.
        // do it.
    }

    // Finished.
    [self performSelectorOnMainThread:@selector(dismissProgressAlert)
                           withObject:nil
                        waitUntilDone:YES];
    // Other finalizations.
}

在实际使用中,带进度条的alert view大概长得是这样的:

 
 
原文:http://www.gocalf.com/blog/iphone-dev-progressview-in-alertview.html
分享到:
评论

相关推荐

    2024职工群体户外交友拓展“躺进春天 趣野人生”活动策划方案ss.pptx

    2024职工群体户外交友拓展“躺进春天 趣野人生”活动策划方案ss.pptx

    pypy3.7-v7.3.4-osx64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    腾讯&阿里&携程面试题汇总(精华版).pdf

    腾讯&阿里&携程面试题汇总(精华版)

    pypy2-v6.0.0-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于C语言实现列车车厢重排问题(源码)

    列车车厢重排问题是经典的组合优化问题,也称为车厢调度问题或车厢排序问题。它的问题描述如下:有一列火车,列车由多节车厢组成,每个车厢上都有一个唯一的标识号。现在需要将这些车厢按照指定的顺序重新排列,使得满足一定的条件,例如车厢编号的升序或降序排列,或者满足某些车厢之间的关系等。

    报告-《新范式 新时代 新机会》dr.pptx

    报告-《新范式 新时代 新机会》dr.pptx

    xx集团数字化转型方案ss.pptx

    xx集团数字化转型方案ss.pptx

    pypy3.7-v7.3.3rc2-osx64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Qlik Sense Desktop 2024

    Qlik Sense Desktop 是一个 Windows 应用程序,让个人用户有机会使用 Qlik Sense 并通过多个数据源以简便的拖放操作创建个性化、交互式数据可视化、报告和仪表板。个人和内部业务使用时免费。 您可以创建自己可以重复使用的 Qlik Sense 应用程序,并且可以修改和与他人共享,而不需要部署和管理大量的商业应用程序。 Qlik Sense是一个强大的可视化BI报表开发平台,Qlik Sense Desktop是Windows桌面版的客户端,通常还有Enterprise HUB云端版。

    Java项目源码_ssm_高校学生选课系统项目源码.rar

    **Java项目源码_ssm_高校学生选课系统项目源码.rar** 本资源为一个基于Java技术栈的高校学生选课系统项目源码,采用了SSM(Spring、SpringMVC、MyBatis)框架进行开发。项目涵盖了学生选课、课程管理、教师管理、学生管理等功能模块,可以为高校教务管理提供有力支持。 项目结构清晰,模块化设计,便于二次开发和定制。主要包括以下几个模块: 1. 用户认证模块:包括用户登录、注册、权限验证等功能,支持多角色(学生、教师、管理员)登录和权限控制。 2. 学生选课模块:学生可以查看课程信息、选课、退课等操作,支持选课时间、人数限制等规则。 3. 课程管理模块:教师可以发布课程、编辑课程信息、上传课程资源等操作,支持课程分类、标签等功能。 4. 教师管理模块:管理员可以添加、编辑、删除教师信息,支持教师角色权限分配。 5. 学生管理模块:管理员可以添加、编辑、删除学生信息,支持学生角色权限分配。 6. 成绩管理模块:教师可以录入、编辑、查看学生成绩,支持成绩统计和导出功能。 7. 通知公告模块:管理员可以发布通知公告,支持公告分类、置顶等功能。 8. 系统设置模块:管理员可以配置系统参数、数据备份、日志查看等操作,保障系统稳定运行。 本项目源码可以为高校教务管理提供有力支持,同时也适用于企业内部培训、教育培训等场景。如有需要,可以根据实际需求进行二次开发和定制,以满足不同场景的需求。

    asp代码ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告)

    asp代码ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告)本资源系百度网盘分享地址

    pypy2.7-v7.3.6-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    星闪技术介绍.pptx

    星闪技术介绍

    《情绪管理指南》培训课件ld.pptx

    《情绪管理指南》培训课件ld.pptx

    毕业设计,前端,前端毕业设计

    毕业设计,前端,前端毕业设计

    课件-咨询IT规划方法dr.pptx

    课件-咨询IT规划方法dr.pptx

    非暴力沟通生命的语言lg.pptx

    非暴力沟通生命的语言lg.pptx

    nacos2.3.1改造适配postgresql配置文件

    nacos2.3.1改造适配postgresql配置文件,无需自己再去做数据库适配,导入数据库即可;

    高级网络人才培训专家-X00070003 第30章 配置PPP

    高级网络人才培训专家_X00070003 第30章 配置PPP

    C#的基础知识文档.doc

    C#的基础知识文档.doc

Global site tag (gtag.js) - Google Analytics