ios - 在后台加载一个 View (及其 WebView 对象),然后执行 Segue

标签 ios xcode uiwebview swift

我有一个导航 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)

我注意到 webViewDidFinishLoadcalled 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/

相关文章:

ios - 从应用程序打开设置(如 Twitter 以打开 Wi-Fi)- 使用 iOS 7.1

uiwebview - 有没有办法刷新您的phonegap应用程序 - 例如,构建页面并从头开始运行脚本?

xcode - 我如何让 Xcode 和 Git 相信我的 Assets 目录已经更新?

ios - 在 iOS 上禁用 'Don' t Reopen' 或 'Reopen' 对话框

xcode - NSWindow 的自定义标题栏

ios - 在 iOS 上本地/离线加载 KRPano 全景图

ios - 如果我想要格式化文本但不想使用 UIWebView,那么 Core Text 是我唯一剩下的选择吗?

ios - "Remind me later"本地通知功能

ios - 如何在 Xcode 6 中向 Storyboard添加带边框的按钮

ios - 带有应用程序图标效果的启动画面 IOS7