use*_*886 3 ios swift wkwebview
我有使用加载多个网页的代码WKWebView。有没有一种方法可以将唯一的完成处理程序函数附加到每个WKWebView.loadHTMLString调用。
我注意到了每个返回值WKNavigation?,但是我不想使用它,WKNavigationDelegate因为它用于所有加载事件。
例如,现在没有完成处理程序,我这样做:
wkWebView?.loadHTMLString("<p>Loading page #1</p>", baseURL: nil)
Run Code Online (Sandbox Code Playgroud)
我想要一个像这样的独特完成处理程序:
wkWebView?.loadHTMLString("<p>SLoading page #1</p>", baseURL: nil, completionHandler: {
print("Loaded page #1. Doing things only required for page #1.")
})
Run Code Online (Sandbox Code Playgroud)
然后对于不同的负载,我可以更改完成处理程序:
wkWebView?.loadHTMLString("<p>SLoading page #2</p>", baseURL: nil, completionHandler: {
print("Loaded page #2")
})
Run Code Online (Sandbox Code Playgroud)
就像您自己正确说loadString的那样,正是出于这个目的返回WKNavigation对象。因此,只需为自己创建一个字典,即可将该WKNavigation对象与完成处理程序相关联,该处理程序将在调用时存储:
var navs = [WKNavigation : () -> ()]()
func loadString(_ s:String, completionHandler:@escaping ()->()) {
if let nav = wkWebView?.loadHTMLString(s, baseURL:nil) {
self.navs[nav] = completionHandler
}
}
Run Code Online (Sandbox Code Playgroud)
现在,作为WKWebView的navigationDelegate,当您听到页面已加载时,可以调用其相应的完成处理程序:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if let f = self.navs[navigation] {
f()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |