今天和大家一起來學(xué)習(xí)一下UIWebView基本使用边涕,有疏忽的地方,還望各位不吝賜教。
一、UIWebView簡(jiǎn)介
UIWebView是iOS內(nèi)置的瀏覽器控件
UIWebView 不但能加載遠(yuǎn)程的網(wǎng)頁資源细诸,還能加載絕大部分的常見文件
系統(tǒng)自帶的Safari就是利用這個(gè)實(shí)現(xiàn)的
內(nèi)存泄露問題是控件本身的問題
二、UIWebView基本使用
// 設(shè)置URL
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
// 加載網(wǎng)頁
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
// 縮進(jìn)設(shè)置
self.webView.scrollView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0);
// 設(shè)置自適應(yīng)
self.webView.scalesPageToFit = YES;
// 設(shè)置對(duì)html標(biāo)簽的識(shí)別 像是電話和網(wǎng)址之類的
self.webView.dataDetectorTypes = UIDataDetectorTypeAll;
// 設(shè)置代理
self.webView.delegate = self;
// 回退
- (void)back:(id)sender {
[self.webView goBack];
}
// 前進(jìn)
- (void)forward:(id)sender {
[self.webView goForward];
}
// 刷新
- (void)reload:(id)sender {
[self.webView reload];
}
// 實(shí)現(xiàn)代理方法——<UIWebViewDelegate>
// 即將加載網(wǎng)頁的時(shí)候調(diào)用
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
// 在這里可以進(jìn)行URL的過濾
NSLog(@"%@",request.URL.absoluteString);
return YES;
}
// 開始加載網(wǎng)頁的時(shí)候調(diào)用
- (void)webViewDidStartLoad:(UIWebView *)webView{
NSLog(@"webViewDidStartLoad");
}
// 加載完成的時(shí)候調(diào)用
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// 只有當(dāng)網(wǎng)頁加載完畢后你才知道能不能前進(jìn)和后退
self.backBtn.enabled = self.webView.canGoBack;
self.forwardBtn.enabled = self.webView.canGoForward;
NSLog(@"webViewDidFinishLoad");
}
// 加載失敗的時(shí)候調(diào)用
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
}
三陋守、HTML和原生進(jìn)行交互的實(shí)現(xiàn)
在這里只講如何實(shí)現(xiàn)揍堰,如果你使用的是第三方,實(shí)現(xiàn)思路差不多嗅义。
先從服務(wù)器獲取相應(yīng)的HTML的數(shù)據(jù),進(jìn)行數(shù)據(jù)轉(zhuǎn)模型隐砸,然后進(jìn)行模型數(shù)據(jù)的處理之碗。
1、樣式處理:
- 處理的過程可以通過添加CSS進(jìn)行樣式的調(diào)整季希,直接創(chuàng)建CSS文件褪那,通過MainBundle進(jìn)行查找,然后通過創(chuàng)建HTML標(biāo)簽字符串進(jìn)行引入式塌。
2博敬、交互處理:
- 對(duì)于需要添加交互的控件,首先建立JS文件峰尝,通過JS相關(guān)方法找到標(biāo)簽偏窝,然后點(diǎn)擊之后的方法可以在JS中進(jìn)行實(shí)現(xiàn)。
- 在原生文件中寫好需要調(diào)用的原生方法后武学,通過UIWebView的代理方法進(jìn)行攔截祭往,如何攔截呢,在shouldStartLoadWithRequest代理方法中可以得到absoluteString火窒。
- 獲取到absoluteString意味著你可以再JS中規(guī)定一個(gè)跳轉(zhuǎn)協(xié)議硼补,如果shouldStartLoadWithRequest中獲取的absoluteString得到該協(xié)議字符串,那么就可以截取其中的信息熏矿。
- 把信息截取后已骇,通過原生包裝成方法,就可以調(diào)用了票编,最終都是在UIWebView中加載的褪储。
// 這里說點(diǎn)HTML數(shù)據(jù)如何加載
// 通過模型把標(biāo)題和時(shí)間進(jìn)行拼接
NSString * titleStr = @"<div id = \"title\">hahaha<\\div>";
NSString * timeStr = @"<div id = \"time\">12:12<\\div>";
NSString * htmlStr = [NSString stringWithFormat:@"<html><head><\\head><body>%@%@<\\body><\\html>",titleStr,timeStr];
// webView加載html的數(shù)據(jù)
[self.webView loadHTMLString:htmlStr baseURL:nil];