在MonoTouch中绑定Obj-C类别

时间:2011-08-28 04:16:57

标签: objective-c xamarin.ios

我正在尝试使用btouch将WEPopover绑定到MonoTouch。它使用UIBarButtonItem类别实现来扩展它的功能,以包括弹出窗口的显示。

@interface UIBarButtonItem(WEPopover)

- (CGRect)frameInView:(UIView *)v;
- (UIView *)superview;

@end

如何使用btouch界面定义将其绑定到MonoTouch?

2 个答案:

答案 0 :(得分:6)

我的旧回答错过了使用类别的事实。评论中指出了这一点,并且与Xamarin文档的链接确实涵盖了这一点。引用:

  

在Objective-C中,可以使用新方法扩展类,   在精神上类似于C#的扩展方法。当其中之一   方法存在,您可以使用[Target]属性来标记   作为Objective-C的接收者的方法的第一个参数   消息。

     

例如,在MonoTouch中,我们绑定了扩展方法   当UIKit作为方法导入时,在NSString上定义   UIView,就像这样:

[BaseType (typeof (UIResponder))]
interface UIView {
    [Bind ("drawAtPoint:withFont:")]
    SizeF DrawString ([Target] string str, PointF point, UIFont font);
}

来自:http://docs.xamarin.com/ios/advanced_topics/binding_objective-c_types#Binding_Class_Extensions

以上示例是MonoTouch用来绑定drawAtPoint:withFont:的内容,它是 NSString UIKit Additions

的一部分

答案 1 :(得分:0)

以上是上述快速(未经测试)的定义:

using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Drawing;

namespace MonoTouch.Popover {
    [BaseType (typeof (UIBarButtonItem))]
    public interface WEPopover {
        [Export ("frameInView")]
        RectangleF FrameInView (UIView view);

        [Export ("superView")]
        UIView SuperView { get; }
    }
}

然后使用 btouch 工具将定义编译为可从MonoTouch使用的.dll,例如

imac:tmp sebastienpouliot$ /Developer/MonoTouch/usr/bin/btouch we.cs 
imac:tmp sebastienpouliot$ ls -l we.dll
-rwxr-xr-x  1 sebastienpouliot  staff  5632 28 Aug 10:23 we.dll

我建议您阅读有关如何绑定现有ObjectiveC库的现有文档。该文件可从以下网址获得:http://ios.xamarin.com/Documentation/Binding_New_Objective-C_Types