webViewDidFinishLoad()似乎没有在Swift中运行

时间:2018-01-02 23:54:45

标签: ios swift web webview

我有一个用于webview的视图控制器,通过 KINWebBrowser 进行设置。

我已经尝试了几种方法来执行这些方法:

func webViewDidStartLoad(webView: UIWebView) {
    print("Strat Loading")
}
func webViewDidFinishLoad(webView: UIWebView) {
    print("Finish Loading")
}
func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
    print(error?.localizedDescription)
}
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    return true
}

override func webViewDidFinishLoad(_ webView: UIWebView) {
    super.webViewDidFinishLoad(webView)
    print("Finish Loading 2")
}

但似乎没有任何效果。

我的班级定义似乎正常:class WebBrowserViewController: KINWebBrowserViewController, NavigationProtocol {

但无论我做什么 - 覆盖func与否,我在这些函数中放入的记录器或打印语句似乎都没有执行。

我做错了什么?我正在尝试创建一个事件,该事件将在所有Web内容加载时进行监听,因此我可以停止显示加载微调器。

编辑:添加代理信息:

当我尝试将一个委托添加到viewDidLoad()时:

webView.delegate = self

我收到了以下错误:

Ambiguous reference to member 'webView(_:decidePolicyFor:decisionHandler:)'

这是我的viewDidLoad()没有委托设置:

override func viewDidLoad() {
    super.viewDidLoad()

    pointsNavigationItem = addPointsButtonToNavigation()

    self.showsURLInNavigationBar = false
    self.showsPageTitleInNavigationBar = false;

    self.tintColor = UIColor.navText

    self.barTintColor = .navBackground

}

我不确定KinWebBrowser会以同样的方式进行授权吗?

在类定义中添加了KINWebBrowserDelegate并添加了以下方法:

func webBrowser(_ webBrowser: KINWebBrowserViewController!, didFailToLoad URL: URL!, error: Error!) {
    print("DEBUG 5")

}

func webBrowserViewControllerWillDismiss(_ viewController: KINWebBrowserViewController!) {
    print("DEBUG 1")
}

func webBrowser(_ webBrowser: KINWebBrowserViewController!, didStartLoading URL: URL!) {
    print("DEBUG 2")

}

func webBrowser(_ webBrowser: KINWebBrowserViewController!, didFinishLoading URL: URL!) {
    print("DEBUG 3")

}

func didChangeValue<Value>(for keyPath: KeyPath<WebBrowserViewController, Value>) {
    print("DEBUG 4")

}

在日志中没有调用任何调试。

1 个答案:

答案 0 :(得分:1)

这些是UIWebView委托方法,但是KINWebBrowser page你可能应该使用KINWebBrowserDelegate协议

  • (void)webBrowser:(KINWebBrowserViewController *)webBrowser didStartLoadingURL:(NSURL *)URL;
  • (void)webBrowser:(KINWebBrowserViewController *)webBrowser didFinishLoadingURL:(NSURL *)URL;
  • (void)webBrowser:(KINWebBrowserViewController *)webBrowser didFailToLoadURL:(NSURL *)URL withError:(NSError *)error;