h5太火了,越來越多的公司喜歡混合開發(fā)?,F(xiàn)在公司各種web頁面,使用靈活(主要是蘋果審核太慢了)。本人在Stack Overflow看過一篇文章意思是蘋果也比較推薦app中適量的web頁面,當(dāng)然全web直接會被拒的。
一個吊吊的控件webView
這是一個非常強大的控件,給一個地址就能加載web頁面,所以以后不會的難得就讓web做哈哈。
首先最好掌握點html和css語言,還好大學(xué)學(xué)的還沒有忘完,書到用時方恨少啊。
介紹方法時會介紹一些使用場景
-
加載內(nèi)容
//加載網(wǎng)絡(luò)
NSURL* url = [NSURL URLWithString:@"http://www.baidu.com"];//創(chuàng)建URL
NSURLRequest* request = [NSURLRequest requestWithURL:url];//創(chuàng)建NSURLRequest
[webView loadRequest:request];//加載
//也可以加載一個本地資源:
NSURL* url = [NSURL fileURLWithPath:filePath];//創(chuàng)建URL
NSURLRequest* request = [NSURLRequest requestWithURL:url];//創(chuàng)建NSURLRequest
[webView loadRequest:request];//加載
//UIWebView 還支持將一個NSString對象作為源來加載。你可以為其提供一個基礎(chǔ)URL,來指導(dǎo)UIWebView對象如何跟隨鏈接和加載遠(yuǎn)程資源:
[webView loadHTMLString:myHTML baseURL:[NSURL URLWithString:@"http://baidu.com"]];
- ####導(dǎo)航
你會遇到這個問題在webView頁面點擊進(jìn)去新的頁面,點擊返回pop整個頁面。一般做法會在左上角設(shè)置兩個按鈕一個pop一個控制webView返回。
//UIWebView類內(nèi)部會管理瀏覽器的導(dǎo)航動作,通過goForward和goBack方法你可以控制前進(jìn)與后退動作:
[webView goBack];
[webView goForward];
[webView reload];//重載
[webView stopLoading];//取消載入內(nèi)容
- ####代理方法
經(jīng)常在web頁面加載gif等待圖片,通常是通過代理方法實現(xiàn),結(jié)合1和2代理方法。
1、- (void)webViewDidStartLoad:(UIWebView *)webView;開始加載的時候執(zhí)行該方法。
2、- (void)webViewDidFinishLoad:(UIWebView *)webView;加載完成的時候執(zhí)行該方法。
3、- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;加載出錯的時候執(zhí)行該方法。
4、- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType;在該代理方法中判斷與webView的交互,可通過html里定義。
方法2是一個很重要的代理方法,如何對這個web頁面動手術(shù)都是在里面進(jìn)行的:
######~eg:
- [計算 webView 顯示內(nèi)容后實際高度](http://www.itdecent.cn/p/f3aa4852e7de)
- [改變UIWebView背景色](http://www.itdecent.cn/p/e8eb63b4b3fd)
總結(jié)一下`stringByEvaluatingJavaScriptFromString`這個方法他是調(diào)用js的方法。所以你可以做很多事(但是你要會js)。
- ####下載到本地在加載到webView
NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];
NSString *filePath = [resourceDocPath stringByAppendingPathComponent:[NSString stringWithFormat:@"doc%@",docType]];
NSData *attachmentData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:theUrl]];
[attachmentData writeToFile:filePath atomically:YES];
NSURL *url = [NSURL fileURLWithPath:filePath];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[attachmentWebView loadRequest:requestObj];