2015-09-04 80 views
1

我使用基于this tutorial的WebView创建了一个简单的应用程序。检测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版。

回答

0

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

+0

您的解决方案不起作用。也许这不重要,但我没有使用'UIWebView',而是'WebView'。 – fragon

+0

你让你的'controller'符合'webView'委托吗? –

1

教程错过了一些东西,需要补充:

self.webView.frameLoadDelegate = self 

(可连接检查来完成)

然后呼叫负载..

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

也将WebFrameLoadDelegate接口添加到您的ViewController。(感谢TJV)

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

丰富的回答工作在Xcode的7.0.1 ElCaptain Swift2

,但我不得不把它连接在连接检查作为Swift2没有接受

self.view.frameLoadDelegate = self

,因为它给了以下错误

无法将类型'ViewController'的值分配给类型为 'WebFrameLoadDelegate!'的值

所以只要你把它连接起来,如下所示,一切都很好。

enter image description here

相关问题