通過使用UIWebView控件,可以實現(xiàn)一個內(nèi)置的瀏覽器(類似于Safari),而且可以直接將這個瀏覽器內(nèi)嵌到應(yīng)用的任意位置,因此非常方便。
創(chuàng)新互聯(lián)建站專注于網(wǎng)站建設(shè),為客戶提供網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗,各類網(wǎng)站都可以開發(fā),成都品牌網(wǎng)站建設(shè),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計,建網(wǎng)站費用,建網(wǎng)站多少錢,價格優(yōu)惠,收費合理。
UIWebView直接繼承了UIView基類,一般不可以與用戶交互。
我們既可通過Interface Builder將UIWebView拖入界面設(shè)計文件中來添加該控件,也可通過代碼創(chuàng)建UIWebView對象來添加,這兩種方式的本質(zhì)是相同的。
在Interface Builder的界面設(shè)置文件中選中某個UIWebView,然后打開Xcode的屬性檢查器面板,可看到如圖10.56所示的面板。
圖10.56 UIWebView對應(yīng)的屬性檢查器面板
獲取UIWebView對象后,可以配置的屬性不同,常用屬性有如下兩個。
(1)scalesPageToFit:對應(yīng)屬性檢查器面板中的Scales Page To Fit。該屬性控制是否縮放網(wǎng)頁以適應(yīng)該控件。
(2)dataDetectorTypes:對應(yīng)屬性面板中的Detection屬性,該屬性支持如下枚舉值。
UIDataDetectorTypePhoneNumbe:自動檢測網(wǎng)頁上的電話號碼,點擊該號碼就會撥號。
UIDataDetectorTypeLink:自動檢測網(wǎng)頁上的超鏈接,點擊該鏈接就會導(dǎo)航到鏈接對應(yīng)的頁面。
UIDataDetectorTypeAddress:自動檢測網(wǎng)頁上的地址。
UIDataDetectorTypeCalendarEvent :自動檢測網(wǎng)頁上的日歷事件。
UIDataDetectorTypeNone:不檢測網(wǎng)頁上的任何內(nèi)容。
UIDataDetectorTypeAll:自動檢測網(wǎng)頁上的所有特殊內(nèi)容。
設(shè)置完UIWebView對象之后,接下來可通過如下方法控制UIWebView加載內(nèi)容。
- loadHTMLString:baseURL::加載并顯示HTML字符串。
- loadRequest::加載并顯示指定URL對應(yīng)網(wǎng)頁。
- stringByEvaluatingJavaScriptFromString::執(zhí)行指定的JavaScript字符串,并返回執(zhí)行結(jié)果。
除此之外,還可調(diào)用如下方法對UIWebView指定導(dǎo)航控制。
- goBack:后退。
- goForward:前進(jìn)。
- reload:重新加載網(wǎng)頁。
- stopLoading:停止加載網(wǎng)頁。
當(dāng)UIWebView加載網(wǎng)頁時,程序可為UIWebView設(shè)置一個delegate委托(該委托對象必須實現(xiàn)UIWebViewDelegate協(xié)議),該協(xié)議中包含如下方法。
- webView:shouldStartLoadWithRequest:navigationType::該UIWebView將要開始裝載指定URL對應(yīng)的網(wǎng)頁時激發(fā)該方法。
- webViewDidStartLoad::該UIWebView開始裝載時激發(fā)該方法。
- webViewDidFinishLoad::該UIWebView裝載完成時激發(fā)該方法。
- webView:didFailLoadWithError::該UIWebView裝載響應(yīng)出現(xiàn)錯誤時激發(fā)該方法。
下面通過示例來介紹如何使用UIWebView顯示HTML字符串。首先創(chuàng)建一個Single View Application,使用Interface Builder打開應(yīng)用的界面設(shè)計文件,并將UIWebView拖入應(yīng)用界面中,然后讓該UIWebView占滿整個手機屏幕。
為了在程序中訪問該UIWebView控件,需要將它綁定到控制器類的webView IBAction屬性。
下面開始修改控制器類的實現(xiàn)部分,主要就是使用UIWebView來裝載、顯示指定的HTML字符串,代碼如下。
程序清單:codes/10/10.14/UIWebViewTest/UIWebViewTest /FKViewController.m
上面的程序先拼接了一段HTML字符串,接下來的粗體字代碼調(diào)用UIWebView的方法來裝載并顯示該HTML字符串,該HTML字符串中嵌入了JavaScript腳本——UIWebView完全支持它們。
編譯、運行該程序,可以看到如圖10.57所示的警告框。
圖10.57 使用UIWebView顯示HTML字符串
從圖10.57可以看出,該UIWebView完全支持包含JavaScript的HTML字符串,圖10.57中看到的警告框就是JavaScript執(zhí)行的效果。
單擊圖10.57所示警告框的“OK”按鈕,該應(yīng)用將會顯示如圖10.58所示的效果。
圖10.58 使用UIWebView顯示HTML字符串
實例:迷你瀏覽器
借助UIWebView的loadRequest:方法,可讓該控件加載并顯示指定URL對應(yīng)的網(wǎng)頁。通過這個功能,可實現(xiàn)自己的瀏覽器。
首先創(chuàng)建一個Single View Application,使用Interface Builder打開應(yīng)用的界面設(shè)計文件,并將UITextField(用于輸入訪問地址)、UIButton和UIWebView拖入應(yīng)用界面中,然后將這些控件擺放整齊。
為了在程序中訪問UITextField和UIWebView控件,分別將它們綁定到addr和webView兩個IBOutlet屬性。為了讓程序可以響應(yīng)按鈕的點擊事件,還需為該按鈕控件的Touch Up Inside事件綁定事件處理方法。
本例使用控制器對象作為UIWebView控件的委托對象,因此該控制器類需要實現(xiàn)UIWebViewDelegate協(xié)議。
接下來開始修改控制器類的實現(xiàn)部分,主要就是使用UIWebView來裝載并顯示指定的URL對應(yīng)的網(wǎng)頁,然后使用委托來監(jiān)控裝載過程事件,其代碼如下。
程序清單:codes/10/10.14/MyBrowser/MyBrowser/FKViewController.m
上面程序中的關(guān)鍵代碼是最后一行粗體代碼,這行代碼調(diào)用了UIWebView的方法來加載并顯示指定URL對應(yīng)的網(wǎng)頁。為了讓程序界面更加友好,程序還為該UIWebView控件指定了self作為委托,該控制器會監(jiān)聽并處理UIWebView的裝載過程:
當(dāng)UIWebView開始加載URL對應(yīng)的網(wǎng)頁時,程序在中央顯示一個轉(zhuǎn)動的進(jìn)度環(huán)。
當(dāng)UIWebView加載完成時,程序隱藏中央轉(zhuǎn)動的進(jìn)度環(huán)。
當(dāng)UIWebView加載失敗時,程序使用UIAlertView顯示錯誤信息。
編譯、運行該程序,即可看到如圖10.59所示的效果。
————本文節(jié)選自《瘋狂ios講義(上)》