iOS UIWebView 的下拉刷新和上拉加载的实现
UIWebView也是可以添加下拉刷新和上拉加载的,只是不能直接添加在UIWebView的头部和尾部,而是在UIWebView内部有一个属性叫scrollView 属性。我门要把下拉刷新和上拉加载添加到webView.scrollView 的头部和尾部。
下面我简单的说一说iOS UIWebView 的下拉刷新和上拉加载的实现。
首先导入第三方库:
MJRefresh
添加头文件:
#import "MJRefresh.h"
添加代理:
@interface ViewController ()<UIWebViewDelegate>
声明全局变量:
@property (nonatomic, strong) UIWebView *webView;//网页
懒加载创建webView:
- (UIWebView *)webView{
if (!_webView) {
UIWebView *webView = [[UIWebView alloc] initWithFrame: CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height-64)];
webView.backgroundColor = [UIColor whiteColor];
webView.delegate = self;
//如果你导入的MJRefresh库不是最新的库,就用下面的方法创建下拉刷新和上拉加载事件
webView.scrollView.header = [MJRefreshNormalHeaderheaderWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
webView.scrollView.footer = [MJRefreshAutoNormalFooterfooterWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)];
//如果你导入的MJRefresh库是最新的库,就用下面的方法创建下拉刷新和上拉加载事件
webView.scrollView.mj_header = [MJRefreshNormalHeaderheaderWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
webView.scrollView.mj_footer = [MJRefreshAutoNormalFooterfooterWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)];
[self.view addSubview:webView];
self.webView = webView;
}
return _webView;
}
#pragma mark - 下拉刷新
- (void)headerRefresh{
[self loadData];
}
#pragma mark - 上拉加载
- (void)footerRefresh{
//注意如果此处使用调用js方法加载下一页,需要在调用后直接执行 [self endRefresh];
//是因为调用JS加载web数据无法监测是否完成加载,所以会导致 footerRefresh 只执行一次
//static NSInteger PageIndex = 1; 设置全局加载页数,并在每次执行headerRefresh 时PageIndex = 1;最后记得销毁 - (void)dealloc { PageIndex = 1;}
PageIndex = PageIndex + 1 ;
NSString * jsStr = [NSString stringWithFormat:@"LoadData('%ld')",(long)PageIndex];
[_webView stringByEvaluatingJavaScriptFromString:jsStr];
[self endRefresh];
//正常调用网页如下:
[self loadData];
}
#pragma mark - 结束下拉刷新和上拉加载
- (void)endRefresh{
//当请求数据成功或失败后,如果你导入的MJRefresh库不是最新的库,就用下面的方法结束下拉刷新和上拉加载事件
[self.webView.scrollView.header endRefreshing];
[self.webView.scrollView.footer endRefreshing];
//当请求数据成功或失败后,如果你导入的MJRefresh库是最新的库,就用下面的方法结束下拉刷新和上拉加载事件
[self.webView.scrollView.mj_header endRefreshing];
[self.webView.scrollView.mj_footer endRefreshing];
}
#pragma mark - 加载网页
- (void)loadData{
NSString *urlString =@"http://XXXXXXX";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationTyp{
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView{
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[self endRefresh];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[self endRefresh];
}
到这里,你就实现了UIWebView 的下拉刷新和上拉加载