📅  最后修改于: 2023-12-03 14:48:31.047000             🧑  作者: Mango
WKWebView
是苹果公司推出的一个强大而高效的浏览器控件,它提供了对现代 Web 技术的全面支持,并替代了过时的 UIWebView。在 Swift 中,我们可以使用 WKWebView
控件来显示网页、URL、HTML 代码和其它 Web 内容。
当 WKWebView
控件开始加载网页时,即使有提前设定的 URL,我们同样可以为它注册一个 Web 加载委托来管理和控制加载的过程。在这篇文章中,我们将学会如何在 Swift 中使用 WKNavigationDelegate
来实现 WKWebView
的加载委托。
要实现 WKWebView
的加载委托,我们需要遵循以下步骤:
WKWebView
实例。WKNavigationDelegate
实例。WKWebView
的 navigationDelegate
属性为 WKNavigationDelegate
实例设置委托。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)
// ])
}
}
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView()
webView.navigationDelegate = self
view.addSubview(webView)
// ...
}
}
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 控件的整个加载过程,并在需要时进行控制和操作。