iOS Swift SFSafariViewController обновить новый URL-адрес и обновить представление

Я использую SFSafariViewController для загрузки веб-ссылок.
В моем случае сначала мне нужно открыть один URL-адрес после некоторого процесса / времени (например, 10 секунд). Мне нужно обновить свой URL-адрес на той же вкладке и обновить SFSafariViewController.

      if let url = URL(string: "Google.com") {
    let VC= SFSafariViewController(url: url)
    VC.delegate = self
    self.present(VC, animated: true, completion: nil)
}

Есть ли способ обновить URL-адрес и обновить текущую страницу SFSafariViewController?

2 ответа

специально разработан для представления веб-контента, с которым ваше приложение не может взаимодействовать. Из документации:

Действия пользователя и взаимодействие с SFSafariViewController не видны вашему приложению, которое не может получить доступ к данным автозаполнения, истории просмотров или данным веб-сайта.

Более конкретно, относящаяся к вашему вопросу, документация для SFSafariViewController также говорит:

Если ваше приложение настраивает, взаимодействует или управляет отображением веб-содержимого, используйте класс WKWebView.

Поскольку вы хотите управлять отображением веб-контента (изменяя URL-адрес), вам, вероятно, следует использовать WKWebView.

С использованием WKWebView решить проблему.

      class webViewController: WKNavigationDelegate, WKUIDelegate {
    var webview: WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        webview = WKWebView(frame: self.view.bounds)
        self.view.addSubview(webview)
        webview.navigationDelegate = self
        webview.uiDelegate = self
    }
    
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        if let url = navigationAction.request.url {
            // Dosomthing()
            decisionHandler(.cancel)
            return
        }
        decisionHandler(.allow)
    }
    
    func Dosomthing() {
        self.webview.load(URLRequest(url: newURL))
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
            self.webview.reload()
        }
    }
}
Другие вопросы по тегам