【问题标题】:Check if UIWebView is done loading in Swift检查 UIWebView 是否在 Swift 中完成加载
【发布时间】:2018-04-28 14:32:49
【问题描述】:

我正在制作一个加载 UIWeb 视图并在网页完全加载时运行一行代码的应用程序。

我正在使用这样的代码来加载网页:

    let links = URL (string: "https://example.com")
    let loadpage = URLRequest(url: links!)
    webPage.loadRequest(load)

如何在网页完成后运行一段代码?我在网上尝试了一些示例,但网页在检查是否已加载时停止加载?

谢谢!

【问题讨论】:

  • 由于之前的编码,我不得不使用 UIWebView。

标签: swift swift3 uiwebview webkit


【解决方案1】:

UIWebView 的文档中所述,对于面向 iOS8 或更高版本的应用程序,您应该改用WKWebView

使用WKWebView 时,您可以使您的类符合WKNavigationDelegate,并且一旦webview 完成加载网络请求,就会调用委托方法func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)

如果由于某种原因您仍然针对 iOS7 或任何以前的 iOS 版本并因此使用UIWebView,您可以改用UIWebViewDelegatefunc webViewDidFinishLoad(_ webView: UIWebView) 方法。

UIWebView 解决方案的骨架代码:

class WebVC: UIViewController {
    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
        webView.delegate = self
        let url = URL(string: "https://example.com")
        let request = URLRequest(url: url)
        webView.loadRequest(request)
    }
}

extension WebVC: UIWebViewDelegate {
    func webViewDidFinishLoad(_ webView: UIWebView) {
        print("Finished loading")
    }
}

【讨论】:

  • 由于应用程序之前的制作方式,它已经有很多使用 UI Web View 的代码。有没有办法用 UIWebView 做到这一点。谢谢!
  • @Bob 检查我回答的最后一段
  • 我尝试运行: func webViewDidFinishLoad(_ webPage: UIWebView) { print("This is done loading") } 这从未在控制台中打印。这是为什么呢?
  • @Bob 正如我在回答中已经说过的那样,您需要使 UIWebView 所在的类符合 UIWebViewDelegate 并将委托设置为 self。
  • @Bob 不,我不是这个意思。检查我的更新答案以设置代表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多