如何实现x:y命名的委托方法?

kgz*_*kgz 5 delphi macos cocoa delegates webview

我想在Delphi中为这个obj-c方法创建一个WebView的WebFrameLoadDelegate方法:

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
Run Code Online (Sandbox Code Playgroud)

如何在delphi中声明此方法?

这些不起作用:

public
    procedure didFinishLoadForm( webView:WebView; Sender:WebFrame ); cdecl;
    procedure webViewdidFinishLoadForm( webView:WebView; Sender:WebFrame ); cdecl;
Run Code Online (Sandbox Code Playgroud)

使用webview.setFrameLoadDelegate(d.GetObjectID)设置委托类似乎没问题;

其中d是TMyWebViewDelegate(TOCObject)类,GetObjectiveClass被覆盖,返回一个接口(NSObject),就像这里的工具栏委托http://delphihaven.wordpress.com/2012/07/15/using-the-cocoa-toolbar- nstoolbar合XE2 /

但我的方法没有被调用.声明这种obj-c方法的模式是什么?

Seb*_*n Z 5

通常最好使用方法和参数的确切名称(由Rudy回答).但有时这是不可能的.两个函数可能需要具有相同的名称,但具有相同的参数类型,因此overload无法使用.在这种情况下,您可以使用该MethodName属性.所以这是另一个有效的解决方案:

[MethodName('webView:didFinishLoadForFrame:')]
procedure webViewdidFinishLoadForm( Sender:WebView; Frame:WebFrame ); cdecl;
Run Code Online (Sandbox Code Playgroud)