Xamarin.Mac 開発者向けの macOS API

概要

Xamarin.Mac を使用して開発する時間の多くは、基になる Objective-C API をあまり気にすることなく、C# で考える、読む、記述することができます。 しかしながら、ときどき、Apple の API ドキュメントを読む、Stack Overflow の回答をご自分の問題の解決策に変換する、あるいは既存のサンプルと比較する必要が生じます。

危険なほど読 Objective-C む

場合によっては、定義またはメソッド呼び出しを Objective-C 読み取り、それを同等の C# メソッドに変換する必要があります。 関数定義を Objective-C 見て、その部分を分解しましょう。 このメソッド (のObjective-Cセレクター) は、 にありますNSTableView

- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint

宣言は左から右に読み取ることができます。

  • プレフィックスは - 、インスタンス (非静的) メソッドであることを意味します。 + は、それがクラス (静的) メソッドであることを意味します
  • (BOOL) は戻り値の型です (C#では bool)
  • canDragRowsWithIndexes は名前の最初の部分です。
  • (NSIndexSet *)rowIndexes は最初のパラメーターであり、 型です。 最初のパラメーターの形式は次のとおりです。 (Type) paramName
  • atPoint:(NSPoint)mouseDownPoint は 2 番目のパラメーターとその型です。 最初の の後のすべてのパラメーターは、次の形式です。 selectorPart:(Type) paramName
  • このメッセージ セレクターの完全な名前は です。 canDragRowsWithIndexes:atPoint: 最後の に : 注意してください。これは重要です。
  • 実際の Xamarin.Mac C# バインドは次のとおりです。 bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)

このセレクター呼び出しは、同じ方法で読み取ることができます。

[v canDragRowsWithIndexes:set atPoint:point];
  • インスタンス v には、 canDragRowsWithIndexes:atPoint 2 つのパラメーター setpointが渡された セレクターが呼び出されています。
  • C# では、 メソッドの呼び出しは次のようになります。 v.CanDragRows (set, point);

特定のセレクターの C# メンバーの検索

呼び出す必要があるセレクターが Objective-C 見つかったので、次の手順は、そのセレクターを同等の C# メンバーにマッピングすることです。 次の 4 つの方法を試すことができます (この例を NSTableView CanDragRows 続けます)。

  1. 自動入力候補リストを使用して、同じ名前の何かを素早くスキャンします。 それがのインスタンスであることがわかっているので、次のように NSTableView 入力できます。

    • NSTableView x;
    • x. [リストが表示されない場合は Ctrl + Space)。
    • CanDrag [enter]
    • メソッドを右クリックし、宣言に移動してアセンブリ ブラウザーを開きます。ここで、 属性を Export 対象のセレクターと比較できます。
  2. クラス バインド全体を検索します。 それがのインスタンスであることがわかっているので、次のように NSTableView 入力できます。

    • NSTableView x;
    • を右クリックし、アセンブリ ブラウザーへの宣言に移動しますNSTableView
    • 問題のセレクターを検索する
  3. Xamarin.Mac API オンライン ドキュメント を使用できます。

  4. Miguel には、Xamarin.Mac API の "Rosetta Stone" ビューが用意されています。 この ビューでは、特定の API を検索できます。 API が AppKit または macOS 固有でない場合は、そこに表示される場合があります。