Ios 未调用UIWebView webViewDidLoadFinish方法

Ios 未调用UIWebView webViewDidLoadFinish方法,ios,uiwebview,swift,Ios,Uiwebview,Swift,今天晚上,我一直在swift上玩web视图,但遇到了一些问题 由于某些原因,我无法启动webViewDidStartLoad或webViewDidFinishLoad方法。 在我的故事板中,我有一个名为webView的出口链接到我的UIWebView元素 有人能帮我做错事吗 这是我的viewController.swift文件: import UIKit class ViewController: UIViewController, UIWebViewDelegate { @IBOu

今天晚上,我一直在swift上玩web视图,但遇到了一些问题

由于某些原因,我无法启动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")
    }
}

正如其他人所指出的,设置UIWebView的委托并遵守UIWebViewDelegate协议是最好的解决方案。

试试这个

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

为了其他可能在这里成功的人。我已将我的委托方法放在委托调用方无法访问的私有扩展中。一旦我将扩展名更改为internal,代理就开始被正确调用。

我也遇到了同样的问题,甚至我确认了UIWebViewDelete为self并实现了其方法

//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完美地结合在一起

但当我换上我的时,我感到很惊讶。webViewDidFinishLoad从未被调用

那我们是怎么解决的

在后台,我们必须将内容类型定义为标题中的文档。它就像魅力一样

因此,请确保您的服务器后端也是如此


以下是我在SWIFT 3中与同一问题斗争的2美分:

以这种方式声明委托方法请注意参数的声明:

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

请记住在Interface Builder中将self设置为webview的委托属性,或者选择webview,从代理出口从连接检查器拖动到webview,或者通过编程方式:self.webview.delegate=self

Swift 3有我的详细解决方案:

1在类中声明编写UIWebViewDelegate。例如:

类MyViewController:UIViewController、UIWebViewDelegate{

2当然,在故事板中,按如下方式创建指向UIViewController的链接: @ibvar-webView:UIWebView

3在func viewDidLoad中添加一行: self.webView.delegate=self


没什么了。特别想向LinusGeffarth和LLIAJLbHOu征求意见。

你设置了webView的委托吗?是的,只需在你的viewDidLoad中添加webView.delegate=self;。谢谢。看起来我没有为webView设置委托。作为一个新手,我一直在学习的教程中都没有明确说明你必须这样做通过。我确实觉得这段视频很有帮助:
func webViewDidStartLoad(_ webView: UIWebView)
func webViewDidFinishLoad(_ webView: UIWebView)