API de macOS para desarrolladores de Xamarin.Mac
Información general
Durante gran parte del tiempo que dedica a desarrollar con Xamarin.Mac, puede pensar, leer y escribir en C# sin preocuparse demasiado por las API subyacentes Objective-C. Sin embargo, a veces tendrá que leer la documentación de la API de Apple, traducir una respuesta de Stack Overflow a una solución para el problema o comparar con un ejemplo existente.
Nociones básicas de Objective-C
A veces, será necesario leer una definición o una llamada de método de Objective-C y traducirla al método de C# equivalente. Echemos un vistazo a una definición de función de Objective-C y analicemos sus partes. Este método (un selector en Objective-C) se puede encontrar en NSTableView
:
- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint
La declaración se puede leer de izquierda a derecha:
- El prefijo
-
significa que es un método de instancia (no estático). + significa que es un método de clase (estático) (BOOL)
es el tipo de valor devuelto (booleano en C#)canDragRowsWithIndexes
es la primera parte del nombre.(NSIndexSet *)rowIndexes
es el primer parámetro y con su tipo. El primer parámetro tiene el formato:(Type) paramName
atPoint:(NSPoint)mouseDownPoint
es el segundo parámetro y su tipo. Cada parámetro después del primero es el formato:selectorPart:(Type) paramName
- El nombre completo de este selector de mensajes es:
canDragRowsWithIndexes:atPoint:
. Tenga en cuenta el símbolo:
al final; es importante. - El enlace real de C# de Xamarin.Mac es:
bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)
Esta invocación del selector se puede leer de la misma manera:
[v canDragRowsWithIndexes:set atPoint:point];
- La instancia
v
tiene el selectorcanDragRowsWithIndexes:atPoint
al que se llama con dos parámetros,set
ypoint
, pasados. - En C#, la invocación del método tiene este aspecto:
v.CanDragRows (set, point);
Búsqueda del miembro de C# para un selector determinado
Ahora que ha encontrado el selector de Objective-C que necesita invocar, el paso siguiente es asignarlo al miembro de C# equivalente. Hay cuatro enfoques que puede probar (siguiendo con el ejemplo NSTableView CanDragRows
):
Use la lista de finalización automática para buscar rápidamente algo del mismo nombre. Como sabemos que es una instancia de
NSTableView
puede escribir:NSTableView x;
x.
[ctrl+espacio si la lista no aparece).CanDrag
[entrar]- Haga clic con el botón derecho en el método, vaya a la declaración para abrir el Explorador de ensamblados, donde puede comparar el atributo
Export
con el selector en cuestión
Busque en todo el enlace de clase. Como sabemos que es una instancia de
NSTableView
puede escribir:NSTableView x;
- Haga clic con el botón derecho en
NSTableView
, vaya a la declaración al Explorador de ensamblados - Buscar el selector en cuestión
Puede usar la documentación en línea de la API de Xamarin.Mac.
Miguel proporciona una vista de "Rosetta Stone" de las API de Xamarin.Mac aquí en la que puede buscar una API determinada. Si la API no es específica de AppKit o macOS, puede encontrarla allí.