API de macOS para desarrolladores de Xamarin.Mac
Información general
Durante gran parte del tiempo que ha desarrollado con Xamarin.Mac, puede pensar, leer y escribir en C# sin preocuparse por las Objective-C API subyacentes. 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 compararla con un ejemplo existente.
Leer lo Objective-C suficiente como para ser peligroso
A veces será necesario leer una definición o una Objective-C llamada de método y traducirla al método de C# equivalente. Echemos un vistazo a una definición Objective-C de función y dividiremos las partes. Este método (un selector en ) 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 (bool en C#)canDragRowsWithIndexeses la primera parte del nombre.(NSIndexSet *)rowIndexeses el primer param y con su tipo. El primer parámetro tiene el formato:(Type) paramNameatPoint:(NSPoint)mouseDownPointes el segundo param 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 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
vtiene su selector llamado con doscanDragRowsWithIndexes:atPointparámetros, y ,setpointpasados. - En C#, la invocación del método tiene el siguiente aspecto:
v.CanDragRows (set, point);
Búsqueda del miembro de C# para un selector determinado
Ahora que ha encontrado el selector que necesita invocar, el Objective-C paso siguiente es asignarlo al miembro de C# equivalente. Hay cuatro enfoques que puede probar (continuando con el NSTableView CanDragRows ejemplo):
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 no aparece la lista).CanDrag[entrar]- Haga clic con el botón derecho en el método y vaya a la declaración para abrir el Explorador de ensamblados, donde puede comparar el
Exportatributo con el selector en cuestión.
Busque todo el enlace de clase. Como sabemos que es una instancia de
NSTableView, puede escribir:NSTableView x;- Haga clic con el botón
NSTableViewderecho en , vaya a la declaración al Explorador de ensamblados. - Búsqueda del selector en cuestión
Puede usar la documentación en línea de la API de Xamarin.Mac.
Miguel proporciona una vista Rosetta 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, es posible que la encuentre allí.