我有一个导航控制器,通过segue管理两个Web视图。当有人单击第一个视图控制器中的特定链接时,该链接将在另一个Web视图中的第二个视图控制器中打开。因此,用户单击链接,对下一个视图执行segue并加载新页面。
我希望segue在执行segue之前等到第二个视图控制器中的网页加载到后台。
我尝试做类似这样的事情(作为viewDidLoad函数中的loadURL请求)但是(正如我所料)我得到一个错误(致命错误:无法解包Optional.None)因为webView没有还装!谁知道如何防止这种情况?
//code
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if(segue.identifier == "second"){
segue.destinationViewController.load()
segue.destinationViewController.viewDidLoad()
}
}
答案 0 :(得分:0)
我会试试这个:
loadRequest
webViewDidFinishLoad
(第一个VC)中致电performSegue
prepareForSegue
中将虚拟webView添加到第二个视图控制器主视图(使用addSubView
)我注意到webViewDidFinishLoad
是called multiple times,您必须添加一些代码才能真正知道加载何时完成(而不是多次调用prepareForSegue
)。
这不是很简单,但希望它有所帮助。
编辑:
这是代码的一个(原始)示例,我测试了它并且它可以工作,但你必须调整一些东西(作为视图的尺寸和 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)
}
}