如何将URL传递到自定义WKWebView控制器?

问题描述 投票:0回答:1

我正在使用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)
        }
    }
ios swift uiviewcontroller wkwebview
1个回答
0
投票

为什么不只是

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)
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.