我有一个基本的cocoa应用程序,它的窗口中只有一个WebView
。WebKit.framework
引用被添加到os x 10.9(mavericks)上的xcode6beta6项目中。我想知道WebView
何时完成页面加载。所以我创建了一个继承WebViewControllerDelegate
的WebFrameLoadDelegate
类。这已经是问题开始的地方:xcode告诉我关于Use of undeclared type 'WebFrameLoadDelegate'
。关于this question on Stack Overflow,它不应该。如前所述,WebKit.framework
由项目和导入到swift类文件中的WebKit
模块引用。我还看到了xcode左侧栏的“headers”文件夹中的WebFrameLoadDelegate.h
,在WebKit.framework
下面。
所有罪恶的根源是文件11
中的lineTestWebView/WebViewControllerDelegate.swift
(我忘记删除这里省略的注释)、类声明和协议引用。
import WebKit
class WebViewControllerDelegate: WebFrameLoadDelegate {
func didFinishLoadForFrame() {
NSLog("didFinishLoadForFrame()")
}
}
设置一切的
AppDelegate
:import Cocoa
import WebKit
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet weak var webView: WebView!
@IBOutlet weak var webViewControllerDelegate: WebViewControllerDelegate!
func applicationDidFinishLaunching(aNotification: NSNotification?) {
self.webView.frameLoadDelegate = self.webViewControllerDelegate
self.webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: "https://stackoverflow.com/")))
}
func applicationWillTerminate(aNotification: NSNotification?) {}
}
有关更多信息,请查看我为这个问题创建的mymy public repository中的代码。
最佳答案
WebFrameLoadDelegate
是一个非正式的协议,因此不能声明它的一致性。只需继承NSObject
并实现所需的方法。
另外,请注意swift方法名是webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!)
,而不仅仅是didFinishLoadForFrame()
。
class WebViewControllerDelegate: NSObject { // WebFrameLoadDelegate
override func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!) {
NSLog("didFinishLoadForFrame()")
}
}