2015-09-04 98 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