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

來源:互聯網
上載者:User

標籤:

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.