Методы WKNavigationDelegate не вызываются

#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:)’ почти соответствует необязательному требованию …»