检测WebView加载完成

时间:2015-09-04 13:12:34

标签: macos cocoa webview swift2

我正在使用基于this tutorial的WebView创建一个简单的应用程序。

我想在加载页面时显示进度指示器,但永远不会调用方法didStartProvisionalLoadForFramedidFinishLoadForFrame。我做错了什么?

ViewController.swift

import Cocoa
import WebKit

class ViewController: NSViewController {


    @IBOutlet weak var webView: WebView!
    @IBOutlet weak var webViewProgressIndicator: NSProgressIndicator!
    let messengerUrl = "https://www.messenger.com/"

    override func viewDidLoad() {
        super.viewDidLoad()
        self.webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: messengerUrl)!))
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }

    func webView(sender: WebView!, didStartProvisionalLoadForFrame frame: WebFrame!)
    {
        self.webViewProgressIndicator.startAnimation(self)
    }

    func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!)
    {
        self.webViewProgressIndicator.stopAnimation(self)
    }
}

我正在使用Xcode 7 Beta和OS X 10.11 Beta。

3 个答案:

答案 0 :(得分:2)

教程错过了一些内容,需要添加:

self.webView.frameLoadDelegate = self

(可在连接检查员中完成)

然后调用负载..

self.webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: messengerUrl)!))

还将WebFrameLoadDelegate接口添加到ViewController ..(感谢tjv)

class ViewController: NSViewController, WebFrameLoadDelegate{  .....   

答案 1 :(得分:2)

Rich的答案适用于Xcode 7.0.1 ElCaptain Swift2

但我必须在连接检查器中连接它,因为Swift2不接受

self.view.frameLoadDelegate = self

因为它给出了以下错误

  

无法指定类型' ViewController'的值到类型的值   ' WebFrameLoadDelegate'!

因此,只要您按照以下方式连接它,一切都很有效。

enter image description here

答案 2 :(得分:0)

您需要指定UIWebview的代表,即:webview.delegate = self