从第一个 VC 预加载 WKWebView url
Preload WKWebView url from first VC
我正在尝试在第二个 VC 为 called/presented 之前预加载 WKWebView。
这可以在 swift5 编程语言中完成吗?也许调用 layoutSubviews()?
是否可以在转换到下一个视图控制器之前预加载 webView?或者是显示正在加载的唯一方法是通过 activity 指标?
第一个VC:
override func viewDidLoad() {
super.viewDidLoad()
SecondVC.loadWebView() //PSUEDO of what I am trying to do
}
第二VC:
func loadWebView() {
// WKWebView nit
webView.navigationDelegate = self
webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
view.addSubview(webView)
view.backgroundColor = .systemBackground
guard let url = URL(string: "https://connect.stripe.com/oauth/authorize?response_type=code&client_id=\(live_client_id)&scope=read_write") else {
return
}
webView.load(URLRequest(url: url))
}
假设这是您拥有 Web 视图的视图控制器。您可以将加载网页的代码放在其初始化程序中。
class WebViewController: UIViewController {
lazy private var webView: WKWebView = {
let webView = WKWebView(frame: view.bounds)
return webView
}()
private var url: URL!
init(url: URL) {
self.url = url
super.init(nibName: nil, bundle: nil)
self.loadWebsite()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
private func loadWebsite() {
view.addSubview(webView)
webView.load(URLRequest(url: url))
}
}
在之前的视图控制器中,您在导航到 Web 视图之前实例化 WebViewController
。当您实例化它时,将调用 WebViewController
的初始化程序,然后调用 loadWebsite()
加载网页的方法。
class ViewController: UIViewController {
let vc = WebViewController(url: URL(string: "https://stripe.com/")!)
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
self.showWebView()
}
}
private func showWebView() {
navigationController?.show(vc, sender: nil)
}
}
因此,当您实际显示 WebViewController
时,希望网页已经加载。
我正在尝试在第二个 VC 为 called/presented 之前预加载 WKWebView。
这可以在 swift5 编程语言中完成吗?也许调用 layoutSubviews()?
是否可以在转换到下一个视图控制器之前预加载 webView?或者是显示正在加载的唯一方法是通过 activity 指标?
第一个VC:
override func viewDidLoad() {
super.viewDidLoad()
SecondVC.loadWebView() //PSUEDO of what I am trying to do
}
第二VC:
func loadWebView() {
// WKWebView nit
webView.navigationDelegate = self
webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
view.addSubview(webView)
view.backgroundColor = .systemBackground
guard let url = URL(string: "https://connect.stripe.com/oauth/authorize?response_type=code&client_id=\(live_client_id)&scope=read_write") else {
return
}
webView.load(URLRequest(url: url))
}
假设这是您拥有 Web 视图的视图控制器。您可以将加载网页的代码放在其初始化程序中。
class WebViewController: UIViewController {
lazy private var webView: WKWebView = {
let webView = WKWebView(frame: view.bounds)
return webView
}()
private var url: URL!
init(url: URL) {
self.url = url
super.init(nibName: nil, bundle: nil)
self.loadWebsite()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
private func loadWebsite() {
view.addSubview(webView)
webView.load(URLRequest(url: url))
}
}
在之前的视图控制器中,您在导航到 Web 视图之前实例化 WebViewController
。当您实例化它时,将调用 WebViewController
的初始化程序,然后调用 loadWebsite()
加载网页的方法。
class ViewController: UIViewController {
let vc = WebViewController(url: URL(string: "https://stripe.com/")!)
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
self.showWebView()
}
}
private func showWebView() {
navigationController?.show(vc, sender: nil)
}
}
因此,当您实际显示 WebViewController
时,希望网页已经加载。