首先這玩意就是比UIWebView好用啊,好在哪呢?記憶體管理,記憶體不會被莫名其妙的吃掉啊。不過也變得比較複雜了一點點,以下我簡單紀錄使用的心得。
當然你也可以設定WKWebViewConfiguration,這其實是把UIWebView的幾個設定抽出來形成的:
這東西的實作如下範例:
這邊我根據要引起Action的request內容來判斷要不要navigation,回傳BOOL值,如果是回傳Allow或Cancel參數會crash,要注意。
大致上就是這樣,更多的我也還沒用到,不過到這邊就能實作基本的網頁畫面了。
初始化
這東西要初始化,最簡單的作法就是WKWebView *webView = [[WKWebView alloc] initWithFrame:frame];
當然你也可以設定WKWebViewConfiguration,這其實是把UIWebView的幾個設定抽出來形成的:
- allowsInlineMediaPlayback
- mediaPlaybackAllowsAirPlay
- mediaPlaybackRequiresUserAction
delegate
原本UIWebView的delegate只有一個,那就是UIWebViewDelegate。但新的delegate拆成兩個:- WKNavigationDelegate
- WKUIDelegate
WKNavigationDelegate方法呼叫順序
他的方法呼叫順序如下,當你loadRequest:之後:- webView:decidePolicyForNavigationAction:decisionHandler:
- webView:didStartProvisionalNavigation:
- webView:decidePolicyForNavigationResponse:decisionHandler:
- webView:didCommitNavigation:
- webView:didFinishNavigation:
decisionHandler的實作
在Action和response兩個方法裡面,一個是處理說引起Navigation的行為是要允許執行或是取消,一個是說根據Navigation的回應結果判斷是要允許執行還是取消,這兩個方法裡面有一個關鍵參數decisionHandler。這東西的實作如下範例:
decisionHandler([self shouldStartDecidePolicy: navigationAction.request]);
這邊我根據要引起Action的request內容來判斷要不要navigation,回傳BOOL值,如果是回傳Allow或Cancel參數會crash,要注意。
大致上就是這樣,更多的我也還沒用到,不過到這邊就能實作基本的網頁畫面了。
留言
張貼留言