【发布时间】:2018-09-10 12:36:09
【问题描述】:
我有一个带有包含 WebView 的 ViewController 的应用程序。因为 WebView 显示的网站非常大,所以我想在应用程序启动时加载 ViewController,这样一旦用户使用 WebView 打开 ViewController,它就会显示已经加载的页面。
我尝试过覆盖 viewDidLoad()、loadView()、便利的 init() 等,但在实际显示 ViewController 之前似乎没有执行任何内容。
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
webViewVC = storyboard.instantiateViewController(withIdentifier: "WebViewController")
if let c = webViewVC.childViewControllers[0] as? WebViewController {
c.dDelegate = self
webViewVC.modalPresentationStyle = .popover
let popover = webViewVC.popoverPresentationController!
popover.delegate = self
popover.permittedArrowDirections = .up
webViewVC.loadView()
present(webViewVC, animated: true, completion: nil) //if I don't add this line, the ViewController doesn't seem to get created before showing
}
那么我可以在present() 之前调用什么来执行一些ViewController 的代码?我需要加载如下内容:
let wwConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.layer.frame.width, height: self.view.layer.frame.height), configuration: wwConfiguration)
webView.navigationDelegate = self
webView.uiDelegate = self
let url = URL(string: . . .
【问题讨论】:
-
您的代码有点混乱。您从情节提要中实例化
webViewVC,然后实例化if let c = webViewVC.childViewControllers[0] as? WebViewController。webViewVC不是WebViewController?是否在点击按钮时调用此代码?请您提供更多背景信息吗? -
我相信你可以做这样的事情的唯一地方就是在
viewWillAppear()中做。至于在应用程序启动时加载 VC,无论如何都会执行此操作,前提是您输入的视图是指示为“初始视图控制器”的视图。此视图在调用viewDidLoad()时在启动屏幕阶段加载。除了在 AppDelegate 中执行一些操作。但是我不建议这样做,因为该应用程序可能尚未完全加载。
标签: ios swift uiviewcontroller wkwebview