我实际上在我的iOS应用程序中使用了两个WebView。我想在启动应用程序时在第二视图控制器中预加载第二个 WebView。我尝试使用 NSNotification Center 预加载 WebView,但它不起作用。如何在第二视图控制器中预加载 WebView?
我通过以下方式解决了类似的问题:
- 预加载包含 Web 视图的视图控制器,并在 Appdelegate 中存储引用。
- 调用self.preloadvc?。view.layoutSubviews() in AppDelegate
- 在任何时候需要,你都可以展示它。
似乎有必要在视图控制器中以编程方式创建 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)
}
}