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