iOS 獲取UIWebView上面的按鈕點擊事件


UIWebView的一些用法總結的網址 http://blog.csdn.net/zhaoweixing1989/article/details/13021513

 

 

在網上看到很多文章都說iOS的UIWebView比較耗內存,在我的項目中,最開始我也是用UIWebView來加載網頁的。剛開始加載的是自己拼接成的Html,后來在Html中加入一個按鈕,點擊之后用當前的UIWebView去加載網絡上的網頁。程序跑起來發現非常耗內存,加載幾個網上的網頁之后就爆內存警告了,不處理的話很容易被評估拒掉app。后來就改成用系統的safari瀏覽器來打開網絡上的網頁,把着耗內存的工作交給蘋果自己自帶的瀏覽器來處理,就避免了我這個app crash。但是怎么獲取網頁上這個按鈕點擊的事件呢,這個按鈕本身就綁定了一個url,怎么讓它點擊之后當前的UIWebView不去load這個url呢。

后來查了一下資料,發現UIWebView的協議里面有這么個方法,可以獲取它加載的網頁上面的事件,比如單擊了圖片,單擊了按鈕等等。

- (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,發生其它行為。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM