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

Этим вечером я играл с веб-просмотрами в Swift, но столкнулся с небольшой проблемой.

По какой-то причине я не могу запустить методы 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")
    }
}

person Grantism    schedule 19.06.2014    source источник
comment
Вы установили делегата webView?   -  person Shai    schedule 19.06.2014
comment
Да, просто добавьте webview.delegate = self; к viewDidLoad.   -  person Cezary Wojcik    schedule 19.06.2014
comment
Большое спасибо. Похоже, я не установил делегата для веб-просмотра. Как новичок, не совсем ясно, что вы должны делать это в любом из руководств, которые я проходил. Однако это видео оказалось полезным: youtube.com/watch?v=iFF1c-RgMkU< /а>   -  person Grantism    schedule 19.06.2014


Ответы (6)


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

var req = NSURLRequest(URL: url)
webView.delegate = self
webView.loadRequest(req)
person LLIAJLbHOu    schedule 19.06.2014

У меня возникла та же проблема, даже я подтвердил 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 никогда не вызывается.

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

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

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

person swiftBoy    schedule 14.06.2016

Вот мои 2 цента борьбы с той же проблемой в SWIFT 3:

class HintViewController: UIViewController, UIWebViewDelegate

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

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

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

person Philip Borges    schedule 25.02.2017

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

person Sergey Grischyov    schedule 19.06.2014

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

person teradyl    schedule 26.02.2016

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

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

класс MyViewController: UIViewController, UIWebViewDelegate {

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

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

Больше ничего. Особая благодарность LinusGeffarth и LLIAJLbHOu за идею.

person OrdoDei    schedule 14.09.2017