无法将变量从视图传递到另一个视图

时间:2015-02-04 13:02:53

标签: ios xcode swift

我有一个包含WebView的视图,当我点击该webview中的链接并且该链接不是来自我使用的URL的同一域时,它将打开包含另一个webview的另一个视图并传递该视图url to it。

这是我的第一个观点

import UIKit

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var webView: UIWebView!

    var url = "http://someurl"

    override func viewDidLoad() {
        super.viewDidLoad()
        webView.delegate = self

        let requestURL = NSURL(string:url)
        let request = NSURLRequest(URL: requestURL!)
        webView.loadRequest(request)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.

    }

    func webViewDidStartLoad(webView : UIWebView) {
        //UIApplication.sharedApplication().networkActivityIndicatorVisible = true

    }

    func webViewDidFinishLoad(webView : UIWebView) {

    }

    func webView(webView: UIWebView, shouldStartLoadWithRequest r: NSURLRequest, navigationType nt: UIWebViewNavigationType) -> Bool {

        var url = webView.request?.URL.absoluteString

        if nt == UIWebViewNavigationType.LinkClicked {
            self.switchScreen(r)
            return false
        }
        return true
    }

    func switchScreen(url: NSURLRequest) {
        let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
        let vc : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("innerBrowser") as UIViewController
        vc.url = url
        self.presentViewController(vc, animated: true, completion: nil)

    }



}

然后是第二个视图

import UIKit

class InnerBrowserController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var innerBrowserView: UIWebView!

    var url:NSURLRequest?

    override func viewDidLoad() {
        super.viewDidLoad()

        //let requestURL = NSURL(string:url!)
        //let request = NSURLRequest(URL: requestURL!)

        self.innerBrowserView.loadRequest(url!)

    }

}

当我在第二个视图中设置网址时,它可以正常工作。

1 个答案:

答案 0 :(得分:2)

我脑子里几乎没有想到什么。

首先,您转为UIViewController,而不是转发给InnerBrowserController。你可以这样做:

let vc = mainStoryboard.instantiateViewControllerWithIdentifier("innerBrowser") as InnerBrowserController

第二件事是你似乎永远不会分配你的vc.url,因此,你没有将值传递给第二个视图。你可以这样做:

let requestURL = NSURL(string:url)
vc.url = NSURLRequest(URL: requestURL!)

前者仅在您将从故事板加载的视图控制器转换为innerBrowserView时才有效。

也许我错过了什么,但我认为这会解决你的问题。