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

标签 ios swift web webview

我有一个 webview 的 View Controller ,通过 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() 添加委托(delegate)时:

webView.delegate = self

我遇到了以下错误:

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

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

override func viewDidLoad() {
    super.viewDidLoad()

    pointsNavigationItem = addPointsButtonToNavigation()

    self.showsURLInNavigationBar = false
    self.showsPageTitleInNavigationBar = false;

    self.tintColor = UIColor.navText

    self.barTintColor = .navBackground

}

我不确定 KinWebBrowser 是否以同样的方式进行委托(delegate)?

在类定义中添加了 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")

}

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

最佳答案

这些是 UIWebView 委托(delegate)方法,但是来自 KINWebBrowser page你可能应该使用 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;

关于ios - webViewDidFinishLoad() 似乎没有在 Swift 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069453/

相关文章:

ios - iOS 8 和 Xcode 6 中的 Cordova

ios - 引用 block 内的实例变量

ios - 输入处理 iOS 设置页面

python - 如何用python备份整个网页包括图片?

css - 拆分背景 50/50

ios - inputAccessoryView 无法正常工作或格式化

ios - 创建简单的 txt 文件并从中读取 objective-c

swift - 如何使用不断变化的唯一标识符将用户数据存储在数据库中

ios - Firebase - 当从常量中设置字典中的键时,updateChildValues 会使应用程序崩溃

java - 由 : java. lang.IllegalArgumentException 引起:cookie 值或属性中的控制字符