UIWebView метод webViewDidLoadFinish не вызывается

Сегодня вечером я играл с веб-представлениями быстро, но столкнулся с проблемой.

По какой-то причине я не могу запустить методы webViewDidStartLoad или webViewDidFinishLoad. В моей раскадровке у меня есть выход под названием webView, связанный с моим элементом UIWebView.

Кто-нибудь может помочь мне в том, что я делаю неправильно?

Это мой файл viewController.swift:

import UIKit

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet var webView : UIWebView

    var url = NSURL(string: "http://google.com")

    override func viewDidLoad() {
        super.viewDidLoad()

        //load initial URL
        var req = NSURLRequest(URL : url)
        webView.loadRequest(req)
    }

    func webViewDidStartLoad(webView : UIWebView) {
        //UIApplication.sharedApplication().networkActivityIndicatorVisible = true
        println("AA")
    }

    func webViewDidFinishLoad(webView : UIWebView) {
        //UIApplication.sharedApplication().networkActivityIndicatorVisible = false
        println("BB")
    }
}

Ответ 1

Попробуйте это!

var req = NSURLRequest(URL: url)
webView.delegate = self
webView.loadRequest(req)

Ответ 2

У меня возникла одна и та же проблема, даже я подтвердил UIWebViewDelete самостоятельно и реализовал свои методы.

//Document file url
var docUrl = NSURL(string: "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAA&url=http%3A%2F%2Fwww.snee.com%2Fxml%2Fxslt%2Fsample.doc&usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQ&sig2=ejeAlBgIZG5B6W-tS1VrQA&bvm=bv.124272578,d.c2I&cad=rja")

let req = NSURLRequest(URL: docUrl!)
webView.delegate = self
//here is the sole part
webView.scalesPageToFit = true
webView.contentMode = .ScaleAspectFit
webView.loadRequest(req)

выше логика отлично работала с тестом URl, который я получил от быстрого поиска google.

Но я, когда я заменил мое. webViewDidFinishLoad никогда не вызывается.

то как мы решили?

В обратной стороне мы должны были определить тип содержимого в виде документа в заголовках. и это работает как шарм.

Поэтому, пожалуйста, убедитесь, что на стороне сервера также есть.

Ответ 3

Как отмечалось другими, установка делегата UIWebView и соответствие протоколу UIWebViewDelegate - наилучшее возможное решение.

Ответ 4

Для других, кто может это сделать. Я поместил мои методы делегата в private extension, к которому не мог получить доступ вызывающий делегат. Как только я изменил расширение на internal, делегаты начали правильно звонить.

Ответ 5

Здесь мои 2 цента сражаются с той же проблемой в SWIFT 3:

class HintViewController: UIViewController, UIWebViewDelegate

Объявить методы делегата таким образом (обратите внимание на объявление аргументов):

func webViewDidStartLoad(_ webView: UIWebView)
func webViewDidFinishLoad(_ webView: UIWebView)

Не забудьте установить self в свойство делегата webview либо в Конструкторе интерфейсов (выберите веб-просмотр, перетащите его из выходной панели делегата в веб-просмотр из Инспектора подключений ИЛИ программно: self.webview.delegate = self)

Ответ 6

Есть мое подробное решение для Swift 3:

1) в объявлении класса напишите UIWebViewDelegate. Например:

класс MyViewController: UIViewController, UIWebViewDelegate {

2), конечно, в раскадровке сделайте ссылку на свой UIViewController следующим образом: @IBOutlet слабый var webView: UIWebView!

3) в func viewDidLoad добавьте одну строку: self.webView.delegate = self

Ничего больше. Специально думает LinusGeffarth и LLIAJLbHOu для идеи.