我有一个包含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!)
}
}
当我在第二个视图中设置网址时,它可以正常工作。
答案 0 :(得分:2)
我脑子里几乎没有想到什么。
首先,您转为UIViewController
,而不是转发给InnerBrowserController
。你可以这样做:
let vc = mainStoryboard.instantiateViewControllerWithIdentifier("innerBrowser") as InnerBrowserController
第二件事是你似乎永远不会分配你的vc.url
,因此,你没有将值传递给第二个视图。你可以这样做:
let requestURL = NSURL(string:url)
vc.url = NSURLRequest(URL: requestURL!)
前者仅在您将从故事板加载的视图控制器转换为innerBrowserView
时才有效。
也许我错过了什么,但我认为这会解决你的问题。