📜  wkwebview 在 swift 中加载委托(1)

📅  最后修改于: 2023-12-03 14:48:31.047000             🧑  作者: Mango

WKWebView 在 Swift 中的加载委托

WKWebView 是苹果公司推出的一个强大而高效的浏览器控件,它提供了对现代 Web 技术的全面支持,并替代了过时的 UIWebView。在 Swift 中,我们可以使用 WKWebView 控件来显示网页、URL、HTML 代码和其它 Web 内容。

WKWebView 控件开始加载网页时,即使有提前设定的 URL,我们同样可以为它注册一个 Web 加载委托来管理和控制加载的过程。在这篇文章中,我们将学会如何在 Swift 中使用 WKNavigationDelegate 来实现 WKWebView 的加载委托。

实现加载委托的步骤

要实现 WKWebView 的加载委托,我们需要遵循以下步骤:

  1. 创建一个 WKWebView 实例。
  2. 将视图添加到页面中。
  3. 创建一个 WKNavigationDelegate 实例。
  4. 通过 WKWebViewnavigationDelegate 属性为 WKNavigationDelegate 实例设置委托。
实现加载委托的代码示例
创建 WKWebView 实例并将视图添加到页面中
import UIKit
import WebKit

class ViewController: UIViewController {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        webView = WKWebView()
        view.addSubview(webView)
        
        // 如果你想让 WKWebView 的页面填充整个屏幕,可以添加以下代码
        // webView.translatesAutoresizingMaskIntoConstraints = false
        // NSLayoutConstraint.activate([
        //    webView.topAnchor.constraint(equalTo: view.topAnchor),
        //    webView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        //    webView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        //    webView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
        // ])
    }
}
创建 WKNavigationDelegate 实例
class ViewController: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        webView = WKWebView()
        webView.navigationDelegate = self
        view.addSubview(webView)
        
        // ...
    }
}
实现 WKNavigationDelegate 的委托方法
class ViewController: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        webView = WKWebView()
        webView.navigationDelegate = self
        view.addSubview(webView)
        
        // ...
        
        loadPage()
    }

    func loadPage() {
        let url = URL(string: "https://www.example.com")!
        let request = URLRequest(url: url)
        webView.load(request)
    }
    
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        // 当 WKWebView 尝试开始加载网页时调用
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // 当 WKWebView 成功加载完网页时调用
    }

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        // 当 WKWebView 加载网页失败时调用
    }

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        // 当 WKWebView 尝试加载一个网页请求时调用,可以在此处控制网页是否加载
    }
}
总结

在本篇文章中,我们学会了如何在 Swift 中使用 WKNavigationDelegate 来实现 WKWebView 的加载委托。通过对委托方法的使用和委托实例的注入,我们可以监测 WKWebView 控件的整个加载过程,并在需要时进行控制和操作。