如何在MonoTouch中绑定这些?

时间:2012-11-08 20:11:20

标签: c# objective-c xamarin.ios

下面的ObjectiveC代码如何转换为MonoTouch?

@interface PSPDFBookmarkViewController : UITableViewController <PSPDFStyleable>
- (instancetype)initWithDocument:(PSPDFDocument *)document;
@property (nonatomic, weak) id<PSPDFBookmarkViewControllerDelegate> delegate;
@property (nonatomic, assign) BOOL isInPopover;
@end
  • 我真的不知道如何处理instancetype这件事(这是什么?)
  • 什么是id<PSPDFBookmarkViewControllerDelegate>
  • 如何处理PSPDFStyleable

这就是我认为的结果:

[BaseType(typeof(UITableViewController)]
    interface PSPDFBookmarkViewController
    {
    void InitWithDocument(PSPDFDocument document);
    [NullAllowed]
    PSPDFBookmarkViewControllerDelegate Delegate { get; set; }
    bool IsInPopover { get; set; }
    }

这个界面怎么样?

@interface PSPDFBookmarkViewController (SubclassingHooks)
- (void)createBarButtonItems;
@end

什么是(SubclassingHooks)关于什么是它的C#表兄?

1 个答案:

答案 0 :(得分:1)

很多问题......这里有几个答案:

ObjectiveC init*选择器是.NET构造函数。所以:

- (instancetype)initWithDocument:(PSPDFDocument *)document;

应该是:

[Export ("initWithDocument:")]
IntPtr Constructor (PSPDFDocument document);

并且您的其他C#绑定缺少其[Export]属性。 E.g。

[Export ("isInPopover")]
bool IsInPopover { get; set; }

其他问题:

<PSPDFStyleable>是一种Objective-C协议,与.NET接口非常相似。现在,如果您不需要PSPDFStyleable,那么您不必绑定它。

  

什么是id<PSPDFBookmarkViewControllerDelegate>

这是一个实现PSPDFBookmarkViewControllerDelegate的实例。您通常会将此PSPDFBookmarkViewControllerDelegate绑定为Delegate属性,并添加WeakDelegate,以便可以使用任何实现选择器的NSObject 。 E.g。

[Export ("delegate", ArgumentSemantic.Assign)][NullAllowed]
NSObject WeakDelegate { get; set; }

[Wrap ("WeakDelegate")]
PSPDFBookmarkViewControllerDelegate Delegate { get; set; }

您需要将Delegates=new string [] { "WeakDelegate" }添加到[BaseType]属性中。如果要将委托成员转换为事件,还要添加Events=。 E.g。

[BaseType (typeof (UITableViewController), Delegates=new string [] { "WeakDelegate" }, Events=new Type [] {typeof (PSPDFBookmarkViewControllerDelegate)})]

(SubclassingHooks)是Objective-C类,与.NET扩展方法非常相似。这需要与现有生成器进行一些手动绑定。

最后,请务必阅读Xamarin文档门户网站上提供的binding documents。它不是很复杂(你的样本很少会出现很多行),但是有很多数据需要消化(如果你不太了解Objective-C,那就更多了。)