UIWebView中添加活动指示器,来化解用户等待心理
序言:
在使用UIWebView中,在导入页面的过程中多少花费时间。为此,我们需要提醒用户当前正在进行数据导入,给用户展示“正在处理中。。。。”的提示。。
正文:
我们今天首先要看的是 友情快递:
友情快递:
UIWebViewDelegate协议中定义的状态监视方法
方法名 | 调用时机 |
-(void)webViewDidStartLoad:(UIWebView *)webView
| 内容读取开始后被调用 |
-(void)webViewDidFinishLoad:(UIWebView *)webView
| 内容读入结束后,被调用 |
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
| 内容读入过程中错误发生后被调用。可被多次调用 |
-
(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
| 内容读入开始时被调用。此时,返回YES后,内容的读入将交给UIWebView;返回NO后,UIWebView不进行读入处理。 如果想在点击链接的时候进行独自返回NO,再次方法中进行处理。 |
开完这个友情快递,你们大概也能知道,上述序言里的功能,也可以实现。。。。
第二:
我们介绍思路。如下:
我们实现—(void)webViewDidStartLoad:(UIWebView *)webView方法、-(void)webViewDidFinishLoad:(UIWebView *)webView方法、-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error方法,在网络通信开始时活动指示器动画开始。通信结束或者发生错误动画停止。
第三:实现功能步骤如下:
1、首先创建两个对象和添加UIWebViewDelegate代理协议。
协议:
UIViewController<UIWebViewDelegate>
两个对象:
UIWebView*_ZSJwebView;//网页架子
UIActivityIndicatorView*_ZSJActivity;
//活动指示器对象
2、我们实例化网页对象和将活动指示器添加到工具条内。
实例化网页对象
// UIWebView的设置
_ZSJwebView=[[UIWebView alloc]initWithFrame:self.view.bounds];
_ZSJwebView.delegate=self;
//UIWebView自动适应
_ZSJwebView.autoresizingMask=UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
_ZSJwebView.scalesPageToFit=YES;//让网页自动适合手机屏幕大小。
[self.view addSubview:_ZSJwebView];
添加活动指示器到工具条内
//添加活动指示器到工具条内
_ZSJActivity=[[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(0, 0, 20, 250)];
UIBarButtonItem*Indicator=[[UIBarButtonItem alloc]initWithCustomView:_ZSJActivity];
UIBarButtonItem*adjustment=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
NSArray*buttons=[NSArray arrayWithObjects:Indicator,adjustment, nil];
[self setToolbarItems:buttons animated:YES];
3、我们要在界面显示的时候,进行web网页的显示。
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
//Web的显示
NSURLRequest*request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://blog.csdn.net/zhoushuangjian511"]];
[_ZSJwebView loadRequest:request];
}
4、UIWebViewDelegate协议的几个方法的使用。
数据开始读入时,让活动指示器开始动画。。。
-(void)webViewDidStartLoad:(UIWebView *)webView{
[_ZSJActivity startAnimating];
}
数据读入完成后,让活动指示器动画停止。
-(void)webViewDidFinishLoad:(UIWebView *)webView{
[_ZSJActivity stopAnimating];
}
当数据读入时出错或者失败,让活动指示器停止。
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
[_ZSJActivity stopAnimating];
}
我们的工作完成。。。。
效果展示:
完整代码:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UIWebViewDelegate>
{
UIWebView*_ZSJwebView;
UIActivityIndicatorView*_ZSJActivity;
}
@end
#import "ViewController.h"
#import "Mylabel.h"
@implementation ViewController
-(void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor=[UIColor greenColor];
self.title=@"明缺信息显示";
[self makeUI];
}
-(void)makeUI
{
//
// UIWebView的设置
_ZSJwebView=[[UIWebView alloc]initWithFrame:self.view.bounds];
_ZSJwebView.delegate=self;
//UIWebView自动适应
_ZSJwebView.autoresizingMask=UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
_ZSJwebView.scalesPageToFit=YES;//让网页自动适合手机屏幕大小。
[self.view addSubview:_ZSJwebView];
//添加活动指示器到工具条内
_ZSJActivity=[[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(self.view.center.x-40, self.view.center.y-40, 80, 80)];
_ZSJActivity.backgroundColor=[UIColor redColor];
[self.view addSubview:_ZSJActivity];
UIBarButtonItem*Indicator=[[UIBarButtonItem alloc]initWithCustomView:_ZSJActivity];
UIBarButtonItem*adjustment=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
NSArray*buttons=[NSArray arrayWithObjects:adjustment, Indicator,adjustment, nil];
[self setToolbarItems:buttons animated:YES];
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
//Web的显示
NSURLRequest*request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://blog.csdn.net/zhoushuangjian511"]];
[_ZSJwebView loadRequest:request];
}
-(void)webViewDidStartLoad:(UIWebView *)webView{
[_ZSJActivity startAnimating];
}
-(void)webViewDidFinishLoad:(UIWebView *)webView{
[_ZSJActivity stopAnimating];
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
[_ZSJActivity stopAnimating];
}
@end