適用於 Xamarin.Mac 開發人員的 macOS API
概觀
在大部分時間使用 Xamarin.Mac 進行開發時,您可以使用 C# 來思考、讀取和寫入,而不必擔心基礎 Objective-C API。 不過,有時候您必須從Apple閱讀 API 檔、將 Stack Overflow 的答案轉譯為問題的解決方案,或與現有的範例進行比較。
閱讀足夠 Objective-C 危險
有時候必須讀取 Objective-C 定義或方法呼叫,並將它轉譯為對等的 C# 方法。 讓我們看看函 Objective-C 式定義,並細分片段。 這個方法(在 中為選取器)可以在 上NSTableView
Objective-C找到:
- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint
宣告可以由左至右讀取:
- 前置
-
詞表示它是實例 (非靜態) 方法。 + 表示它是類別 (static) 方法 (BOOL)
是傳回型別 (C# 中的 bool)canDragRowsWithIndexes
是名稱的第一個部分。(NSIndexSet *)rowIndexes
是第一個參數,且其類型為 。 第一個參數的格式如下:(Type) paramName
atPoint:(NSPoint)mouseDownPoint
是第二個參數及其類型。 第一個參數之後的每個參數都是格式:selectorPart:(Type) paramName
- 此訊息選取器的完整名稱為:
canDragRowsWithIndexes:atPoint:
。 請注意結尾的:
- 這很重要。 - 實際的 Xamarin.Mac C# 系結為:
bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)
這個選取器呼叫可以讀取相同的方式:
[v canDragRowsWithIndexes:set atPoint:point];
- 實例
v
的canDragRowsWithIndexes:atPoint
選取器會使用兩個參數set
和point
傳入的 來呼叫。 - 在 C# 中,方法調用看起來像這樣:
v.CanDragRows (set, point);
尋找指定選取器的 C# 成員
既然您已找到需要叫用的 Objective-C 選取器,下一個步驟就是將它對應至對等的 C# 成員。 您可以嘗試四種方法(繼續進行 NSTableView CanDragRows
範例):
使用自動完成清單快速掃描相同名稱的專案。 因為我們知道它是您可以輸入的
NSTableView
實例:NSTableView x;
x.
[如果列表未出現,則為 ctrl+空格鍵]。CanDrag
[enter]- 以滑鼠右鍵按兩下 方法,移至宣告以開啟元件瀏覽器,您可以在其中比較
Export
屬性與有問題的選取器
搜尋整個類別系結。 因為我們知道它是您可以輸入的
NSTableView
實例:NSTableView x;
- 以滑鼠右鍵按兩下
NSTableView
,移至 [元件瀏覽器] 的宣告 - 搜尋有問題的選取器
您可以使用 Xamarin.Mac API 線上檔案 。
Miguel 提供 Xamarin.Mac API 的「Rosetta Stone」檢視,您可以在這裡 搜尋指定的 API。 如果您的 API 不是 AppKit 或 macOS 特定,您可能會發現該處。