适用于 Xamarin.Mac 开发人员的 macOS API
概述
在很多时候使用 Xamarin.Mac 进行开发时,可以用 C# 思考、阅读和编写,而不必担心基础 Objective-C API。 但有时你需要阅读 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
是第二个参数及其类型。 第一个参数后的每个参数采用以下格式:selectorPart:(Type) paramName
- 此消息选择器的完整名称为:
canDragRowsWithIndexes:atPoint:
。 请注意末尾的:
,这很重要。 - 实际的 Xamarin.Mac C# 绑定为:
bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)
可以采用相同的方式读取此选择器调用:
[v canDragRowsWithIndexes:set atPoint:point];
- 实例
v
使用传入的两个参数(set
和point
)调用其canDragRowsWithIndexes:atPoint
选择器。 - 在 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,你可能会在此处找到它。