iOS開發(fā)-UIWebView

一、WebView的基本使用

1 概念性知識
    01 webView是有缺點的,會導致內(nèi)存泄露,而且這個問題是它系統(tǒng)本身的問題。
    02 手機上面的safai其實就是用webView來實現(xiàn)的
    03 現(xiàn)在的開發(fā)并不完全是原生的開發(fā),而更加傾向于原生+Html5的方式
    04 webView是OC代碼和html代碼之間進行交互的橋梁

2 代碼相關(guān)
/*A*網(wǎng)頁操控相關(guān)方法**/
    [self.webView goBack];      回退
    [self.webView goForward];   前進
    [self.webView reload];      刷新

    //設(shè)置是否能夠前進和回退
    self.goBackBtn.enabled = webView.canGoBack;
    self.fowardBtn.enabled = webView.canGoForward;

/*B*常用的屬性設(shè)置**/
    self.webView.scalesPageToFit = YES; 設(shè)置網(wǎng)頁自動適應(yīng)
    self.webView.dataDetectorTypes = UIDataDetectorTypeAll; 
    設(shè)置檢測網(wǎng)頁中的格式類型,all表示檢測所有類型包括超鏈接、電話號碼、地址等。
    self.webView.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);

/*C*相關(guān)代理方法**/
    //每當將加載請求的時候調(diào)用該方法,返回YES 表示加載該請求,返回NO 表示不加載該請求
    //可以在該方法中攔截請求
    -(BOOL)webView:(UIWebView *)webView 
           shouldStartLoadWithRequest:(NSURLRequest *)request 
           navigationType:(UIWebViewNavigationType)navigationType
    {
        return ![request.URL.absoluteString containsString:@"dushu"];
    }

    //開始加載網(wǎng)頁,不僅監(jiān)聽我們指定的請求,還會監(jiān)聽內(nèi)部發(fā)送的請求
    -(void)webViewDidStartLoad:(UIWebView *)webView

    //網(wǎng)頁加載完畢之后會調(diào)用該方法
    -(void)webViewDidFinishLoad:(UIWebView *)webView

    //網(wǎng)頁加載失敗調(diào)用該方法
    -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

/*D*其它知識點-加載本地資源**/
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"text.html" withExtension:nil];
    [self.webView loadRequest:[NSURLRequest requestWithURL:url]];

二、OC和JS代碼的互調(diào)

01 OC調(diào)用JS的代碼
    NSString *str = [self.webView stringByEvaluatingJavaScriptFromString:@"sum()"];

02 JS怎么調(diào)用OC的說明
    新的需求:點擊按鈕的時候撥打電話
    但是我在點擊按鈕的時候,用戶是不知道的,我們怎么能夠知道用戶點擊了網(wǎng)頁上面的一個按鈕,
    只能通過一個技巧,那就是自己搞一個特定的協(xié)議頭比如說'abc://',
    當我攔截到你的網(wǎng)絡(luò)請求的時候,只需要判斷一下當前的協(xié)議頭是不是這個就能判斷你現(xiàn)在是否是JS調(diào)用。
    OC里面有通過字符串生成SEL類型的方法,所以當拿到數(shù)據(jù)之后做下面的事情
    1)截取方法的名稱
    2)將截取出來的字符串轉(zhuǎn)換為SEL
    3)利用performSelect方法來調(diào)用SEL

03 涉及到的相關(guān)方法
    [@"abcdef" hasPrefix:@"A"] //判斷字符串是否以一個固定的字符開頭,這里為A
    //截串操作
    - (NSString *)substringFromIndex:(NSUInteger)from;
    //切割字符串,返回一個數(shù)組
    - (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;
    //替換操作
    - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
    //把string包裝成SEL

    SEL selector = NSSelectorFromString(sel);

04 如何屏蔽警告
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            //-Warc-performSelector-leaks為唯一的警告標識
            [self performSelector:selector withObject:nil];
    #pragma clang diagnostic pop
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在App開發(fā)過程中經(jīng)常需要加載網(wǎng)頁,iOS開發(fā)領(lǐng)域加載網(wǎng)頁主要有兩種方式:一是利用UIWebView,二是利用iO...
    MrZhaoCn閱讀 2,698評論 0 2
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評論 25 709
  • 你可能聽說過jQuery,它的名字起得很土,但卻是JavaScript世界中使用最廣泛的一個庫。江湖傳言,全世界大...
    八寶君閱讀 252評論 0 1
  • 那片天空下過雨 因為你曾經(jīng)來過
    日月之明angel閱讀 163評論 4 1

友情鏈接更多精彩內(nèi)容