【问题标题】:Preload WKWebView url from first VC从第一个 VC 预加载 WKWebView url
【发布时间】:2021-06-26 23:33:08
【问题描述】:

我正在尝试在调用/呈现 SecondVC 之前预加载 WKWebView。

这可以用 swift 5 编程语言实现吗?也许调用 layoutSubviews()?

是否可以在转换到下一个视图控制器之前预加载 webView?或者是通过活动指示器来显示这是加载的唯一方法吗?

第一个 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))
        
    }

【问题讨论】:

  • 毫无意义。还没有第二个视图控制器。
  • 我知道,但是有没有办法可以在显示下一个 vc 之前以某种方式预加载 webview?
  • 是的,就像您预加载任何内容一样。在转场开始时做。
  • 你为什么要这样做?

标签: ios swift uiviewcontroller wkwebview


【解决方案1】:

假设这是您拥有 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 时,希望网页已经加载完毕。

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多