Как ссылаться на объект URL внутри функции из ViewController.swift? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь передать веб-страницу другому WebView из ViewController.swift.URL-адрес инициируется другим классом.

До сих пор мне удавалось создать веб-представление, создать переход и загрузить фиктивную веб-страницу внутри этого контроллера после нажатия на кнопку из ViewController.swift.Когда я нажимаю кнопку, на консоли печатается правильный веб-адрес с вызовом * 1003.

Я попытался вызвать переменную, сначала объявив глобальную переменную внутри 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, а затем загрузить его в веб-представление.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 18 июня 2019

В WikiViewController вместо создания url типа Capital? он должен иметь тип URL?, т. Е.

var url: URL?

. Используйте url для создания URLRequestдля WKWebView.

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)
        }
    }
}

Использование:

При создании instance из WikiViewController в методе mapView(_:,annotationView:, calloutAccessoryControlTapped:) установите свойство 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, создайте экземпляр URL, используя этот String, а затем установите его как vc.url.

...