2

以下の 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# いとことは何ですか?

4

1 に答える 1

1

多くの質問...ここにいくつかの答えがあります:

ObjectiveCinit*セレクターは .NET コンストラクターです。そう:

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

次のようにする必要があります。

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

他の C# バインディングには[Export]属性がありません。例えば

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

その他の質問:

<PSPDFStyleable>は Objective-C プロトコルであり、.NET インターフェイスに非常に似ています。必要がない場合PSPDFStyleableは、バインドする必要はありません。

とはid<PSPDFBookmarkViewControllerDelegate>

を実装するインスタンスですPSPDFBookmarkViewControllerDelegatePSPDFBookmarkViewControllerDelegate通常、これをプロパティとしてバインドし、適切なセレクターを実装するものを使用できるようDelegateに を追加します。例えばWeakDelegateNSObject

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

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

Delegates=new string [] { "WeakDelegate" }属性に追加する必要があり[BaseType]ます。また、デリゲート メンバーをイベントに変換する場合も追加Events=します。例えば

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

(SubclassingHooks)は Objective-C のカテゴリであり、.NET 拡張メソッドに非常に似ています。これには、既存のジェネレーターとの手動バインディングが少し必要です。

最後に、Xamarin ドキュメント ポータルで入手できるバインディング ドキュメントを必ずお読みください。それほど複雑ではありません (サンプルは非常に少ない行で多くのケースにヒットします) が、消化するデータが大量にあります (Objective-C をよく知らない場合はさらに多くのデータがあります)。

于 2012-11-08T20:22:54.053 に答える