1

インターフェイス ビルダーで WebView UIDelegate を BrowserWindowController にリンクしました。これは、webuidelegate 関数を実装するデリゲートです。私の browserwindowcontroller クラスでは、次のことも行います。

クラス BrowserWindowController(NSWindowController):

webView = objc.IBOutlet()

def windowDidLoad(self):
    self.webView.setUIDelegate_(self)

def webViewDidStartLoad_(self, webView):
    print "DID LOAD START"

def webView_didFailLoadWithError_(self, webView, error):
    print "ERROR"

def webViewDidFinishLoad_(self, webView):
    print "DID FINISH LOAD"

 def webView_shouldStartLoadWithRequest_navigationType_(self, webView, request, nav_type):
    print "LOAD REQ"

WebUIDelegate の一部である最後の 4 つの関数はいずれも呼び出されません。私もやってみました(これは非公式ですが、正式なプロトコルのためのものです): class BrowserWindowController(NSWindowController, WebKit.protocols.WebUIDelegate):

しかし、それはうまくいきません。同じ方法で WebView WebPolicyDelegate を実装しましたが、機能します。WebUIDelegate が機能しないのはなぜですか? ドキュメントで読んだ方法でリンクしました。この非公式の議定書に欠けているものはありますか?

4

1 に答える 1

0

Apple のドキュメント (1) によると、デリゲート プロトコルには webviewDidStartLoad: という名前のセレクターがありません。セレクターは「UIWebViewDelegate」プロトコルですが、OSX ではなく iOS で使用されます。

1: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Protocols/WebUIDelegate_Protocol/Reference/Reference.html

于 2013-02-06T07:38:10.950 に答える