APIs do macOS para desenvolvedores do Xamarin.Mac
Visão geral
Durante grande parte do seu tempo desenvolvendo com o Xamarin.Mac, você pode pensar, ler e escrever em C# sem muita preocupação com as APIs subjacentes Objective-C . No entanto, às vezes, você precisará ler a documentação da API da Apple, traduzir uma resposta do Stack Overflow para uma solução para o problema ou comparar com um exemplo existente.
Ler o suficiente Objective-C para ser perigoso
Às vezes, será necessário ler uma Objective-C definição ou chamada de método e traduzi-la para o método C# equivalente. Vamos dar uma olhada em uma Objective-C definição de função e dividir as partes. Esse método (um seletor em Objective-C) pode ser encontrado em NSTableView
:
- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint
A declaração pode ser lida da esquerda para a direita:
- O
-
prefixo significa que é um método de instância (não estático). + significa que é um método de classe (estático) (BOOL)
é o tipo de retorno (bool em C#)canDragRowsWithIndexes
é a primeira parte do nome.(NSIndexSet *)rowIndexes
é o primeiro parâmetro e com seu tipo. O primeiro parâmetro está no formato:(Type) paramName
atPoint:(NSPoint)mouseDownPoint
é o segundo parâmetro e seu tipo. Cada parâmetro após o primeiro é o formato:selectorPart:(Type) paramName
- O nome completo deste seletor de mensagem é:
canDragRowsWithIndexes:atPoint:
. Observe o:
no final – é importante. - A associação real do Xamarin.Mac C# é:
bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)
Essa invocação de seletor pode ser lida da mesma maneira:
[v canDragRowsWithIndexes:set atPoint:point];
- A instância
v
está tendo seucanDragRowsWithIndexes:atPoint
seletor chamado com dois parâmetros,set
epoint
, passados. - Em C#, a invocação do método tem esta aparência:
v.CanDragRows (set, point);
Localizando o membro C# para um determinado seletor
Agora que você encontrou o Objective-C seletor que precisa invocar, a próxima etapa é mapeá-lo para o membro C# equivalente. Há quatro abordagens que você pode tentar (continuando com o NSTableView CanDragRows
exemplo):
Use a lista de preenchimento automático para verificar rapidamente algo com o mesmo nome. Como sabemos que é uma instância de,
NSTableView
você pode digitar:NSTableView x;
x.
[ctrl+espaço se a lista não aparecer).CanDrag
[enter]- Clique com o botão direito do mouse no método , vá para a declaração para abrir o Assembly Browser em que você pode comparar o
Export
atributo com o seletor em questão
Pesquise toda a associação de classe. Como sabemos que é uma instância de,
NSTableView
você pode digitar:NSTableView x;
- Clique com o botão direito do mouse
NSTableView
em , vá para declaração para Navegador de Assembly - Pesquisar o seletor em questão
Você pode usar a documentação online da API Xamarin.Mac .
Miguel fornece uma exibição "Rosetta Stone" das APIs do Xamarin.Mac aqui que você pode pesquisar uma determinada API. Se sua API não for específica do AppKit ou do macOS, você poderá encontrá-la lá.