我正在使用基于this tutorial的WebView创建一个简单的应用程序。
我想在加载页面时显示进度指示器,但永远不会调用方法didStartProvisionalLoadForFrame
和didFinishLoadForFrame
。我做错了什么?
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 :(得分: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'!
因此,只要您按照以下方式连接它,一切都很有效。
答案 2 :(得分:0)
您需要指定UIWebview
的代表,即:webview.delegate = self