如何在 ViewController.swift 的函数中引用 URL 对象?
How to reference a URL object inside a function from ViewController.swift?
我正在尝试将网页从 ViewController.swift 传递到另一个 WebView。 URL 由另一个 class 发起。
到目前为止,我已经能够创建 webView,创建 segue,并在点击 ViewController.swift 中的按钮时在该控制器中加载一个虚拟网页。当我点击按钮时,正确的网址会通过 print(wikiURL)
调用打印在控制台上。
我试图通过首先在 ViewController 内声明一个全局变量来调用变量,然后在函数内修改它,然后尝试通过设置变量从 webView 控制器到达。
这是我调用 segue 的函数:
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "WikiViewController") as? WikiViewController {
guard let capital = view.annotation as? Capital else { return }
let wikiURL = capital.url
print(wikiURL)
navigationController?.pushViewController(vc, animated: true)
}
这是我的 webView 控制器:
class WikiViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func loadView() {
webView = WKWebView()
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
title = webView.title
let request = URLRequest(url: URL(string: "")!)
webView.load(request)
}
}
我应该可以将 URL(string: "")!)
替换为 wikiURL
,然后将其加载到 webView 中。
感谢您的帮助。
在 WikiViewController
中,不是创建 Capital?
类型的 url
,它必须是 URL?
类型,即
var url: URL?
使用此 url
为 WKWebView
创建 URLRequest
。
class WikiViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
var url: URL?
override func loadView() {
webView = WKWebView()
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
title = webView.title
if let url = self.url {
let request = URLRequest(url: url)
webView.load(request)
}
}
}
用法:
在 mapView(_:,annotationView:, calloutAccessoryControlTapped:)
方法中创建 WikiViewController
的 instance
时,将 属性 vc.url
设置为 wikiURL
。
if let vc = storyboard?.instantiateViewController(withIdentifier: "WikiViewController") as? WikiViewController {
guard let capital = view.annotation as? Capital else { return }
let wikiURL = capital.url
print(wikiURL)
vc.url = wikiURL //here......
navigationController?.pushViewController(vc, animated: true)
}
注意: 我假设 wikiURL
是 URL?
类型。如果它是 String
,请使用 String
创建一个 URL
实例,然后将其设置为 vc.url
.
我正在尝试将网页从 ViewController.swift 传递到另一个 WebView。 URL 由另一个 class 发起。
到目前为止,我已经能够创建 webView,创建 segue,并在点击 ViewController.swift 中的按钮时在该控制器中加载一个虚拟网页。当我点击按钮时,正确的网址会通过 print(wikiURL)
调用打印在控制台上。
我试图通过首先在 ViewController 内声明一个全局变量来调用变量,然后在函数内修改它,然后尝试通过设置变量从 webView 控制器到达。
这是我调用 segue 的函数:
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "WikiViewController") as? WikiViewController {
guard let capital = view.annotation as? Capital else { return }
let wikiURL = capital.url
print(wikiURL)
navigationController?.pushViewController(vc, animated: true)
}
这是我的 webView 控制器:
class WikiViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func loadView() {
webView = WKWebView()
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
title = webView.title
let request = URLRequest(url: URL(string: "")!)
webView.load(request)
}
}
我应该可以将 URL(string: "")!)
替换为 wikiURL
,然后将其加载到 webView 中。
感谢您的帮助。
在 WikiViewController
中,不是创建 Capital?
类型的 url
,它必须是 URL?
类型,即
var url: URL?
使用此 url
为 WKWebView
创建 URLRequest
。
class WikiViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
var url: URL?
override func loadView() {
webView = WKWebView()
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
title = webView.title
if let url = self.url {
let request = URLRequest(url: url)
webView.load(request)
}
}
}
用法:
在 mapView(_:,annotationView:, calloutAccessoryControlTapped:)
方法中创建 WikiViewController
的 instance
时,将 属性 vc.url
设置为 wikiURL
。
if let vc = storyboard?.instantiateViewController(withIdentifier: "WikiViewController") as? WikiViewController {
guard let capital = view.annotation as? Capital else { return }
let wikiURL = capital.url
print(wikiURL)
vc.url = wikiURL //here......
navigationController?.pushViewController(vc, animated: true)
}
注意: 我假设 wikiURL
是 URL?
类型。如果它是 String
,请使用 String
创建一个 URL
实例,然后将其设置为 vc.url
.