Swift :(预)从initialViewController加载UIWebView

时间:2016-05-09 13:24:14

标签: ios swift uiwebview instantiation nsurlrequest

我有两个ViewControllers。最初的ViewController是输入和存储URL的地方。这个初始ViewController的viewDidLoad也应该在应用程序启动时开始加载第二个ViewController的web内容。

secondViewController仅包含WebView。

当我启动应用程序时,第二个ViewController中的func loadWebView被成功调用。但是,一旦我点击goButton来呈现第二个ViewController。它空洞了。 (在secondViewController viewDidLoad中本地调用func loadWebView将成功加载网站。)

我认为我在实例化secondViewController的方式和我调用它的方式上做错了。我想我会创建两个不同的secondViewController实例并调用空实例。我对任何指针感到高兴。

编辑:我希望应用程序在初始ViewController打开后立即开始加载网站。不仅在我访问secondViewController时。

EDIT2:问题可能是webView.loadRequest(请求)初始调用的数据没有保存到webView-subview吗?第二次调用webView时它是空白的,因为没有保存数据。有谁知道如何从loadRequest调用中保存/加载数据?

EDIT3:忘了EDIT2。阅读解决方案正确答案下面的评论!

初始ViewController:

var svc: UIViewController = UIViewController()

override func viewDidLoad() {
    loadWebView("https://www.google.com")
}

func loadWebView(URLString:String) {

    if let theRequestURL = NSURL (string: URLString) {
    let theRequest = NSURLRequest (URL: theRequestURL) 

    let vc: secondViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("secondViewController") as! secondViewController

        vc.loadWebView(theRequest)
        svc = vc
    } 
}

@IBAction func goButton(sender: AnyObject) {
        self.presentViewController(svc, animated: false, completion: nil)
}

secondViewController:

class secondViewController: UIViewController, UIWebViewDelegate {
    @IBOutlet var webView: UIWebView! = UIWebView()

func loadWebView(request : NSURLRequest) {
    webView.loadRequest(request)
    }
}

1 个答案:

答案 0 :(得分:1)

我不太确定secondViewController的两个实例,但可能是webView的两个实例...假设您在故事板中定义了一个实例。实例化IBOutlet是不正常/错误的。

我建议将loadWebView转换为storeRequestURL之类的内容。将请求保存到实例变量,然后在loadRequest的{​​{1}}(或viewWillAppear}中调用viewDidLoad