如何在 swift 3 中启动应用程序时在另一个视图控制器中预加载 UIWebView



我实际上在我的iOS应用程序中使用了两个WebView。我想在启动应用程序时在第二视图控制器中预加载第二个 WebView。我尝试使用 NSNotification Center 预加载 WebView,但它不起作用。如何在第二视图控制器中预加载 WebView?

我通过以下方式解决了类似的问题:

  1. 预加载包含 Web 视图的视图控制器,并在 Appdelegate 中存储引用。
  2. 调用self.preloadvc?。view.layoutSubviews() in AppDelegate
  3. 在任何时候需要,你都可以展示它。

似乎有必要在视图控制器中以编程方式创建 Web 视图

class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
//
var preloadvc : PreloadVC? = nil
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            //Preloading
        DispatchQueue.main.async(execute: {
                    self.preloadvc = PreloadVC()
                    //Thats the trick for preloading the view
                    self.preloadvc?.view.layoutSubviews()
                })
    return true
}

}

class PreloadVC : UIViewController, UIWebViewDelegate {
var mypreloadedView: UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()
    mypreloadedView = UIWebView(frame: view.frame)
    view.addSubview(mypreloadedView)
    mypreloadedView.delegate = self
    if let myurl = URL(string: "https://www.google.de") {
        let request = URLRequest(url: myurl)
        self.mypreloadedView.loadRequest(request)
    }
}
func webViewDidFinishLoad(_ webView: UIWebView)
{
    print("Loaded")
}

}

随时随地演示 :

@IBAction func ShowPreloaded(_ sender: Any) {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    if let preloadedvc = appDelegate.preloadvc {
        self.present(preloadedvc, animated: true, completion: nil)
    }
}

最新更新