#swift #wkwebview #swift4.2
#swift #wkwebview #swift4.2
Вопрос:
Я пытаюсь написать контроллер с webview, и мне нужны методы WKNavigationDelegate, проблема в том, что эти методы вообще не выполняются.
Это мой контроллер:
import UIKit
import WebKit
public class WebViewController: UIViewController {
private let webView: WKWebView = WKWebView()
override public func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
webView.isUserInteractionEnabled = true
view = webView
}
}
extension WebViewController: WKNavigationDelegate {
private func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
debugPrint("didCommit")
}
private func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
debugPrint("didFinish")
}
private func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
debugPrint("didFail")
}
}
Этот контроллер добавляется к контроллеру верхнего вида с использованием контейнерного представления, также webview правильно загружает веб-сайт. У кого-нибудь была подобная проблема или знает, делаю ли я что-то не так
Комментарии:
1. Вы пробовали добавлять точки останова в каждый метод?
2. @Shabirjan да, я сделал, вот как я это тестировал
3. Хорошо, просто подсказка, попробуйте удалить
private
из каждогоDelegate
метода и попробуйте.
Ответ №1:
Похоже, что вы добавляете методы private
с WKWebViewDelegate
помощью, удалите их, подобные этому, и это сработает.
extension ViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
debugPrint("didCommit")
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
debugPrint("didFinish")
}
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
debugPrint("didFail")
}
}
Попробуйте это, также не забудьте загрузить URL в WebView или что вы хотите загрузить.
Комментарии:
1. Это не работает, и я правильно загружаю URL-адрес
2. Ну, я создал демонстрационный проект, и все эти методы делегирования запускаются.
3.
public
Видимость была необходима, глупая ошибка. Спасибо4. Кстати, явная маркировка этих делегатов
Public
не требуется.5. Вы уверены, Шабир? Вы пробовали это? Я тестировал без модификатора public, и он не работает, XCode также выдает следующее сообщение: «Метод экземпляра’WebView(_:didCommit:)’ почти соответствует необязательному требованию …»