我有一个导航 Controller ,它通过 segue 管理两个 Web View 。当有人在第一个 View Controller 中单击特定链接时,该链接将在另一个 Web View 的第二个 View Controller 中打开。因此,用户单击一个链接,执行到下一个 View 的 segue 并加载新页面。
我希望 segue 等到第二个 View Controller 中的网页在执行 segue 之前加载到后台。
我尝试做这样的事情(作为 viewDidLoad 函数中的 loadURL 请求)但是(如我所料)我得到一个错误( fatal error :无法解包 Optional.None),因为 webView 尚未加载!任何人都知道如何防止这种情况?
//code
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if(segue.identifier == "second"){
segue.destinationViewController.load()
segue.destinationViewController.viewDidLoad()
}
}
最佳答案
我会试试这个:
- 在第一个 View Controller 中创建一个虚拟 webview(未添加到主视图的 webview)。
- 在同一个 VC 中,当用户单击链接时,在虚拟 webview 上开始
loadRequest
- 然后在(第一个 VC 的)
webViewDidFinishLoad
中调用performSegue
- 在
prepareForSegue
中将虚拟 webView 添加到第二个 View Controller 主视图(使用addSubView
)
我注意到 webViewDidFinishLoad
是 called multiple times并且您必须添加一些代码才能真正知道加载何时完成(而不是多次调用 prepareForSegue
)。
这不是很简单,但希望对您有所帮助。
编辑:
这是代码的(原始)示例,我已经对其进行了测试并且可以正常工作,但是您必须调整一些东西(例如 View 的尺寸和 finishLoad 东西)(操作按钮的 openPage
):
class DetailViewController: UIViewController, UIWebViewDelegate {
var dummyWebViewInFirstVC: UIWebView = UIWebView(frame: CGRectMake(0, 0, 320, 480))
var done = false
@IBAction func openPage(sender: AnyObject) {
let url = NSURL(string: "http://www.apple.com/")
let request = NSURLRequest(URL: url)
dummyWebViewInFirstVC.loadRequest(request)
}
override func viewDidLoad() {
super.viewDidLoad()
dummyWebViewInFirstVC.delegate = self
}
func webViewDidFinishLoad(theWebView: UIWebView) {
if !done {
self.performSegueWithIdentifier("openPage", sender: self)
done = true;
}
}
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
let secondViewController : UIViewController = segue.destinationViewController as UIViewController
secondViewController.view.addSubview(dummyWebViewInFirstVC)
}
}
关于ios - 在后台加载一个 View (及其 WebView 对象),然后执行 Segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25034515/