webViewDidFinishLoad()似乎没有在Swift中运行 [英] webViewDidFinishLoad() does not appear to be running in Swift

查看:564
本文介绍了webViewDidFinishLoad()似乎没有在Swift中运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a view controller for a webview, setup through KINWebBrowser.

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

I've tried several ways to get these methods to execute:

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")
}

但似乎没有任何效果。

我的类定义似乎正常:类WebBrowserViewController:KINWebBrowserViewController,NavigationProtocol {

My class definition seems normal: class WebBrowserViewController: KINWebBrowserViewController, NavigationProtocol {

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

But no matter what I do - override func or not, no logger or print statement I put in these functions seems to be executed.

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

What am I doing wrong? I am trying to create an event that will listen to when all of the web content is loaded so I can stop having a loading spinner appear.

编辑:添加代理信息:

Adding delegate information:

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

When I have tried to add a delegate to viewDidLoad():

webView.delegate = self

我收到以下错误:

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

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

This is my viewDidLoad() without the delegate setting:

override func viewDidLoad() {
    super.viewDidLoad()

    pointsNavigationItem = addPointsButtonToNavigation()

    self.showsURLInNavigationBar = false
    self.showsPageTitleInNavigationBar = false;

    self.tintColor = UIColor.navText

    self.barTintColor = .navBackground

}

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

I'm not sure that KinWebBrowser does delegation the same way?

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

Added the KINWebBrowserDelegate to the class definition and added the following methods:

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")

}

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

None of the debugs are getting called in the log.

推荐答案

这些是UIWebView委托方法,但是来自您应该使用KINWebBrowserDelegate协议 KINWebBrowser页面

Those are the UIWebView delegate methods, however from the KINWebBrowser page you should probably be using the KINWebBrowserDelegate protocol


  • (void)webBrowser:(KINWebBrowserViewController *)webBrowser didStartLoadingURL:(NSURL *)URL;

  • (void)webBrowser:(KINWebBrowserViewController *)webBrowser didFinishLoadingURL:(NSURL *)URL;

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

这篇关于webViewDidFinishLoad()似乎没有在Swift中运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆