UIWebView的一些用法總結的網址 http://blog.csdn.net/zhaoweixing1989/article/details/13021513
在網上看到很多文章都說iOS的UIWebView比較耗內存,在我的項目中,最開始我也是用UIWebView來加載網頁的。剛開始加載的是自己拼接成的Html,后來在Html中加入一個按鈕,點擊之后用當前的UIWebView去加載網絡上的網頁。程序跑起來發現非常耗內存,加載幾個網上的網頁之后就爆內存警告了,不處理的話很容易被評估拒掉app。后來就改成用系統的safari瀏覽器來打開網絡上的網頁,把着耗內存的工作交給蘋果自己自帶的瀏覽器來處理,就避免了我這個app crash。但是怎么獲取網頁上這個按鈕點擊的事件呢,這個按鈕本身就綁定了一個url,怎么讓它點擊之后當前的UIWebView不去load這個url呢。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//判斷是否是單擊
if (navigationType == UIWebViewNavigationTypeLinkClicked)
{
NSURL *url = [request URL];
if([[UIApplication sharedApplication]canOpenURL:url])
{
[[UIApplication sharedApplication]openURL:url];
}
return NO;
}
return YES;
}
拼接的Html最后加的按鈕的方法如下:
NSURL * path = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"source_page_button" ofType:@"png"]];
[strReturn appendString:[NSString stringWithFormat:@"<div style='display:block;text-align:center;margin:0 auto;'><a href='%@'><img src='%@'></a></div>",_url,path]];
這樣寫了之后,點擊按鈕之后就不會用當前的UIWebView來加載網絡上的網頁,而是調用系統的Safari來打開。
注意:最后一點要返回YES,否則UIWebView剛開始將一片空白,這是因為第一次加載的時候也是UIWebView請求一個鏈接,如果返回NO,就不會去加載了。還可以對url的內容進行判斷,看是什么請求。
接口,如果為webView添加了delegate對象並實現該接口,那么在webView加載任何一個frame之前都會delegate對象的該方法,該方法的返回值用以控制是否允許加載目標鏈接頁面的內容,返回YES將直接加載內容,NO則反之。並且UIWebViewNavigationType枚舉,定義了頁面中用戶行為的分類,包括
- UIWebViewNavigationTypeLinkClicked,用戶觸擊了一個鏈接。
- UIWebViewNavigationTypeFormSubmitted,用戶提交了一個表單。
- UIWebViewNavigationTypeBackForward,用戶觸擊前進或返回按鈕。
- UIWebViewNavigationTypeReload,用戶觸擊重新加載的按鈕。
- UIWebViewNavigationTypeFormResubmitted,用戶重復提交表單
- UIWebViewNavigationTypeOther,發生其它行為。