我正在尝试使用btouch将WEPopover绑定到MonoTouch。它使用UIBarButtonItem
类别实现来扩展它的功能,以包括弹出窗口的显示。
@interface UIBarButtonItem(WEPopover)
- (CGRect)frameInView:(UIView *)v;
- (UIView *)superview;
@end
如何使用btouch界面定义将其绑定到MonoTouch?
答案 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