通過使用UIWebView控件,可以實作一個内置的浏覽器(類似于Safari),而且可以直接将這個浏覽器内嵌到應用的任意位置,是以非常友善。
UIWebView直接繼承了UIView基類,一般不可以與使用者互動。
我們既可通過Interface Builder将UIWebView拖入界面設計檔案中來添加該控件,也可通過代碼建立UIWebView對象來添加,這兩種方式的本質是相同的。
在Interface Builder的界面設定檔案中選中某個UIWebView,然後打開Xcode的屬性檢查器面闆,可看到如圖10.56所示的面闆。

圖10.56 UIWebView對應的屬性檢查器面闆
擷取UIWebView對象後,可以配置的屬性不同,常用屬性有如下兩個。
(1)scalesPageToFit:對應屬性檢查器面闆中的Scales Page To Fit。該屬性控制是否縮放網頁以适應該控件。
(2)dataDetectorTypes:對應屬性面闆中的Detection屬性,該屬性支援如下枚舉值。
UIDataDetectorTypePhoneNumbe:自動檢測網頁上的電話号碼,點選該号碼就會撥号。
UIDataDetectorTypeLink:自動檢測網頁上的超連結,點選該連結就會導航到連結對應的頁面。
UIDataDetectorTypeAddress:自動檢測網頁上的位址。
UIDataDetectorTypeCalendarEvent :自動檢測網頁上的月曆事件。
UIDataDetectorTypeNone:不檢測網頁上的任何内容。
UIDataDetectorTypeAll:自動檢測網頁上的所有特殊内容。
設定完UIWebView對象之後,接下來可通過如下方法控制UIWebView加載内容。
- loadHTMLString:baseURL::加載并顯示HTML字元串。
- loadRequest::加載并顯示指定URL對應網頁。
- stringByEvaluatingJavaScriptFromString::執行指定的JavaScript字元串,并傳回執行結果。
除此之外,還可調用如下方法對UIWebView指定導航控制。
- goBack:後退。
- goForward:前進。
- reload:重新加載網頁。
- stopLoading:停止加載網頁。
當UIWebView加載網頁時,程式可為UIWebView設定一個delegate委托(該委托對象必須實作UIWebViewDelegate協定),該協定中包含如下方法。
- webView:shouldStartLoadWithRequest:navigationType::該UIWebView将要開始裝載指定URL對應的網頁時激發該方法。
- webViewDidStartLoad::該UIWebView開始裝載時激發該方法。
- webViewDidFinishLoad::該UIWebView裝載完成時激發該方法。
- webView:didFailLoadWithError::該UIWebView裝載響應出現錯誤時激發該方法。
下面通過示例來介紹如何使用UIWebView顯示HTML字元串。首先建立一個Single View Application,使用Interface Builder打開應用的界面設計檔案,并将UIWebView拖入應用界面中,然後讓該UIWebView占滿整個手機螢幕。
為了在程式中通路該UIWebView控件,需要将它綁定到控制器類的webView IBAction屬性。
下面開始修改控制器類的實作部分,主要就是使用UIWebView來裝載、顯示指定的HTML字元串,代碼如下。
程式清單:codes/10/10.14/UIWebViewTest/UIWebViewTest /FKViewController.m
<a href="http://s3.51cto.com/wyfs02/M00/11/E9/wKioL1LkcHnSEAN3AAKqcMIWIEE322.jpg" target="_blank"></a>
上面的程式先拼接了一段HTML字元串,接下來的粗體字代碼調用UIWebView的方法來裝載并顯示該HTML字元串,該HTML字元串中嵌入了JavaScript腳本——UIWebView完全支援它們。
編譯、運作該程式,可以看到如圖10.57所示的警告框。
圖10.57 使用UIWebView顯示HTML字元串
從圖10.57可以看出,該UIWebView完全支援包含JavaScript的HTML字元串,圖10.57中看到的警告框就是JavaScript執行的效果。
單擊圖10.57所示警告框的“OK”按鈕,該應用将會顯示如圖10.58所示的效果。
圖10.58 使用UIWebView顯示HTML字元串
借助UIWebView的loadRequest:方法,可讓該控件加載并顯示指定URL對應的網頁。通過這個功能,可實作自己的浏覽器。
首先建立一個Single View Application,使用Interface Builder打開應用的界面設計檔案,并将UITextField(用于輸入通路位址)、UIButton和UIWebView拖入應用界面中,然後将這些控件擺放整齊。
為了在程式中通路UITextField和UIWebView控件,分别将它們綁定到addr和webView兩個IBOutlet屬性。為了讓程式可以響應按鈕的點選事件,還需為該按鈕控件的Touch Up Inside事件綁定事件處理方法。
本例使用控制器對象作為UIWebView控件的委托對象,是以該控制器類需要實作UIWebViewDelegate協定。
接下來開始修改控制器類的實作部分,主要就是使用UIWebView來裝載并顯示指定的URL對應的網頁,然後使用委托來監控裝載過程事件,其代碼如下。
程式清單:codes/10/10.14/MyBrowser/MyBrowser/FKViewController.m
<a href="http://s3.51cto.com/wyfs02/M00/11/E9/wKioL1LkcNDQfL1UAASzwABcngk330.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/11/EA/wKiom1LkcPSC2Oc3AAJuWh9ZRMc514.jpg" target="_blank"></a>
上面程式中的關鍵代碼是最後一行粗體代碼,這行代碼調用了UIWebView的方法來加載并顯示指定URL對應的網頁。為了讓程式界面更加友好,程式還為該UIWebView控件指定了self作為委托,該控制器會監聽并處理UIWebView的裝載過程:
當UIWebView開始加載URL對應的網頁時,程式在中央顯示一個轉動的進度環。
當UIWebView加載完成時,程式隐藏中央轉動的進度環。
當UIWebView加載失敗時,程式使用UIAlertView顯示錯誤資訊。
編譯、運作該程式,即可看到如圖10.59所示的效果。
————本文節選自《瘋狂ios講義(上)》