我正在使用WKWebView从TableView中包含的列表中打开URL。但是,我不知道如何将URL从TableView控制器传递到我创建的WKWebView类。我的课继承自UIViewController。
到目前为止,我已经按照Aaron Rasmussen对How to write init methods of a UIViewController in Swift的说明尝试创建自定义初始化程序,但是当我这样做时,最终会出现错误Incorrect argument label in call (have 'url:', expected 'coder:')
,并且我不知道如何调用新的初始化程序,而不是默认的初始化程序(super的init?)。
任何建议都将不胜感激。我不确定我是否接近最佳解决方案,或者是否缺少使URL传递到WKWebView的简便方法。
WKWebView类:
class WKBrowserController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
var webURL: URL
init(url: URL, nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?){
self.webURL = url
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
self.webURL = URL(string: "www.google.com")!
super.init(coder: aDecoder)
}
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
self.view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
webView.load(URLRequest(url: webURL))
}
TableView控制器
class TableViewController: UITableViewController {
...
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
showHome(indexPath: indexPath)
}
func showHome(indexPath: IndexPath){
if let url = URL(string: urlString){
let customWebController = WantedBrowserController(url: urlString) // Error here
present(customWebController, animated: true)
}
}
为什么不只是
class WKBrowserController: UIViewController, WKNavigationDelegate {
var webView: WKWebView?
var webURL: URL? { didSet {
self.navigate()
}
}
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
self.view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
self.navigate()
}
fileprivate func navigate() {
if let url = self.webURL {
webView.load(URLRequest(url: url))
}
}
然后在表格视图中
func showHome(indexPath: IndexPath){
if let url = URL(string: urlString) {
let customWebController = WantedBrowserController()
customWebController.webURL = url
present(customWebController, animated: true)
}
}