本文将从最基本处开始,H5的运用除了一些很简单

近年在调整H5页面包车型大巴时候发现,如若你首先次加载完H5页面后做刷当前页面包车型地铁时候,假若这一年断网,倘若你是用的loadRequest,webview并不会马上回去didFailLoadWithError,会先回调webViewDidFinishLoad,可是页面并不曾准确呈现,然后会做H5管理,即便后续没有刷新页面包车型客车操作,就能展现二个空白页在那里,起首决断大概是H5页面包车型大巴逻辑有个别难题,不过却传递给大家三个荒唐的消息。然而倘若您使用reload,webview会立时回到didFailLoadWithError。所以并不是把loadRequest当做reload来用,大概会并发不是您的因由的BUG。

      H5出来未来影响尤为牛逼,从前要求活动端苦逼多天搞出来的正确的原生复杂页面,曾经在付出中多了一种选取,那正是利用H5. H5的运用除了部分很轻松的静态页面不要求活动端多做处理外,越来越多的时候供给活动端与H5页面交互来拍卖部分点击事件。

新近在开辟一个IOS应用使用到webview控件加载网页,难题来了,webview加载网页是亟需时刻的,即使客户操作非常快,出现三个load页面未有加载实现的就踏入下一个的话,那么就能够进去:

       随着H5的文火,手提式有线电话机端的页面相当多也被网页端侵蚀了,作为手提式无线电话机端的开采人士,即便不供给学会H5的开拓,怎样和h5(js)交互也改成了必备的本事,当中UIWebView的运用则是最最最宗旨的了,本文将从最基本处初叶,直到与之并行,再任用些许扩张,记录一下这几个知识以备后用。

1,UIWebViewDelegate代理方法

      好了废话非常少说,直接上代码。先来说一说UIWebView,那是iOS加载网页照旧其余格式文件常用的控件。

func webView(webView: UIWebView, didFailLoadWithError error: NSError) {

1.代理方法

#pragma mark - webview代理方法

- (void)webViewDidStartLoad:(UIWebView *)webView

网页初步加载,基本上不怎么用到,网页加载进程中的一些职业可以在那时做;

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

那是与网页交互的大桥,即使想要与网页互动,和H5协商好,不管是拼接UTiguanL,依旧调用js,仍旧怎么,在此情势都可完结;

- (void)webViewDidFinishLoad:(UIWebView *)webView

页面加载成功的操作,举例彰显网页的标题等等

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

网页加载战败的不二法门,能够安装一个告负的页面,最棒不要白的,进步客户体验。

那三个点子是确定会用到的。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;//该webview将在开端加载钦命U奥迪Q5L对应的网页时激活该方法。然后实行webViewDidStartLoad函数,所以大家得以在此函数中开展局地呼吁深入分析,UKoleosL地址解析的行事。

      UIWebView加载的api有三种

//TODO

2.起首化方法

咱俩平日是须求给webview加多进程条和下拉刷新控件,

诚如景色下,用一些很好的第三方的就完全够用了,比方,进程条使用NJKWebViewProgress完成,刷新嘛,当然是MJRefresh咯。

代码如下:

在.h添加 UIWebViewDelegate,UIScrollViewDelegate,NJKWebViewProgressDelegate

@property (nonatomic,strong) NJKWebViewProgress *webViewProgress;

@property (nonatomic,strong) NJKWebViewProgressView *webViewProgressView;

在.m页面伊始化的时候兑现

_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - 64 - 49)];

_webView.scrollView.mj_header =[MJRefreshNormalHeader headerWithRefreshingBlock:^{

[_webView reload];

}];

[_webView setBackgroundColor:[UIColor clearColor]];

[[_webView scrollView] setShowsVerticalScrollIndicator:NO];

[self.view addSubview:_webView];

[self setAutomaticallyAdjustsScrollViewInsets:NO];

_webViewProgress = [[NJKWebViewProgress alloc] init];

_webView.delegate = _webViewProgress;

_webView.scrollView.delegate= self;

_webViewProgress.webViewProxyDelegate = self;

_webViewProgress.progressDelegate = self;

CGRect navBounds = self.navigationController.navigationBar.bounds;

CGRect barFrame = CGRectMake(0, navBounds.size.height - 2, navBounds.size.width, 2);

_webViewProgressView = [[NJKWebViewProgressView alloc] initWithFrame:barFrame];

_webViewProgressView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;

_webViewProgressView.backgroundColor = self.navigationController.navigationBar.backgroundColor;

[_webViewProgressView setProgress:0 animated:YES];

[self.navigationController.navigationBar addSubview:_webViewProgressView];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[_webView loadRequest:request];

#pragma mark - NJKWebViewProgressDelegate

-(void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress

{

     [_webViewProgressView setProgress:progress animated:YES];

}

不移至理,若是页面加载完要安装题指标话:

if (webView.isLoading) {

return;

} else {

[_webView.scrollView.mj_header endRefreshing];

_webviewTitle = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];

[self.navigationItem setTitle:_webviewTitle];

}

页面消失的时候须求:

[_webView stopLoading];

[_webViewProgressView setProgress:0 animated:YES];

这几个骨干的实在都得以长久以来了

- (void)webViewDidStartLoad:(UIWebView *)webView;//网页起始加载的时候调用

- (void)loadRequest:(NSURLRequest *)request;

- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;

}

3.webview失败页面处理

既然如此是网页的加载,必然出现停业的气象,失败的管理也异常首要,可是很简短,只需兑现

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

{

      //假诺上三个呼吁还没完,又新建了个央求会报错

if(error.code == NSURLErrorCancelled )

{

return;

}

if (webView.request.URL.absoluteString && ![webView.request.URL.absoluteString isEqualToString:@""]) {

if (errorview) {

errorview.hidden = NO;

[webView addSubview:errorview];

}else{

errorview=[XFTools errorView:_webView.frame];

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

btn.frame = CGRectMake(kScreenWidth/2-75, kScreenHeight-250, 150, 80);

[btn setTitle:@"重新加载" forState:UIControlStateNormal];

[btn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];

[btn addTarget:self action:@selector(webviewLoadUrl) forControlEvents:UIControlEventTouchUpInside];

[errorview addSubview:btn];

[webView addSubview:errorview];

}

}

}

- (void)webViewDidFinishLoad:(UIWebView *)webView;//网页加载成功的时候调用

其间第贰个- (void)loadRequest:(NSUMuranoLRequest *)request; 我们使用的时候最广泛。正是一向将url加载就足以了

难点就在那边了,由于本人的写的代码,借使报错,小编给予他一个赶回的页面。那样的代码,每便就应际而生,借使顾客操作极其频仍,叁个页面未有加载完成就踏向下一个页面,那时候,

4.扩展(WKWebView)

未来,iOS系统已经晋升到iOS10,使用iOS7及前边的类别的顾客比例一度不行之小了,即使使用无需支持她们,换言之正是从iOS8起首支持的话,不要紧采纳WKWebView,听大人讲她有繁多的优势,举例:60fps的轮转刷新率以及内置手势、将UIWebViewDelegate与UIWebView拆分成了14类与3个契约(查看官方文书档案 )、与Safari一样的JavaScript引擎、占内部存储器更加小等等。

用法:

外人的链接:点击这里 

每户写的格外好,就不去抄了。。。。

=====本公告一段落=====

- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;//是二个可选的函数,若是页面加载失利能够依照差异的荒谬类型反映给客户不相同的音讯,加载错误时会调用该方法

本文由必威发布于必威-编程,转载请注明出处:本文将从最基本处开始,H5的运用除了一些很简单

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。