我想在Delphi中为这个obj-c方法创建一个WebView的WebFrameLoadDelegate方法:
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
如何在delphi中声明此方法?
这些不能工作:
public
procedure didFinishLoadForm( webView:WebView; Sender:WebFrame ); cdecl;
procedure webViewdidFinishLoadForm( webView:WebView; Sender:WebFrame ); cdecl;
设置委托类似乎没问题 webview.setFrameLoadDelegate(d.GetObjectID);
其中d是TMyWebViewDelegate(TOCObject)类,GetObjectiveClass被覆盖,返回一个接口(NSObject),就像这里的工具栏委托一样http://delphihaven.wordpress.com/2012/07/15/using-the-cocoa-toolbar-nstoolbar-in-xe2/
但我的方法没有被调用。 声明这种obj-c方法的模式是什么?
答案 0 :(得分:5)
通常最好使用方法和参数的确切名称(由Rudy回答)。但有时这是不可能的。两个函数可能需要具有相同的名称,但具有相同的参数类型,因此无法使用overload
。在这种情况下,您可以使用MethodName
属性。所以这是另一个有效的解决方案:
[MethodName('webView:didFinishLoadForFrame:')]
procedure webViewdidFinishLoadForm( Sender:WebView; Frame:WebFrame ); cdecl;
答案 1 :(得分:3)
实现例程的正确语法是:
procedure webView(sender: WebView; didFinishLoadForFrame: WebFrame);
Objective-C选择器的名称是webView:didFinishLoadForFrame:
。第一部分必须成为方法的精确名称,以下部分必须成为参数的精确名称(区分大小写,因为Objective-C区分大小写)。这就是Delphi如何将方法名称映射到选择器。