Padrões e idiomas comuns no Xamarin.Mac
Em todas as APIs da Apple expostas por meio de C#, determinados idiomas e padrões aparecem repetidamente. Se você tiver experiência com programação com o Xamarin.iOS, elas poderão parecer familiares. A documentação geralmente se refere a esses padrões e idiomas repetidamente, portanto, ter uma compreensão sólida deles ajudará você a entender a documentação encontrada.
MVC – Controlador de Exibição de Modelo
O Controlador de Exibição de Modelo, ou MVC, é um padrão muito comum encontrado em todo o Cocoa. Uma discussão detalhada está além do escopo deste documento, mas resumidamente é uma maneira de estruturar seu aplicativo em componentes:
- Objetos de modelo representam os dados subjacentes que estão sendo exibidos e manipulados (Endereços semelhantes em um catálogo de endereços)
- Exibir objetos manipula o desenho de um determinado objeto na tela e lidar com a interação do usuário (um campo de texto mostrando o endereço na tela)
- Os objetos do controlador lidam com a interação entre o Modelo e o Modo de Exibição. Eles efetuam push de alterações de modelo "para cima" para atualizar a exibição e efetuar push das alterações "para baixo" do Modo de Exibição quando os usuários fizerem alterações na interface do usuário.
Se você estiver familiarizado com o MVVM (Modo de Exibição de Modelo ViewModel) de outras bibliotecas, como o WPF, o Controlador atuará de forma semelhante ao ViewModel, mas geralmente está mais próximo dos elementos específicos da interface do usuário.
Mais detalhes podem ser encontrados aqui:
Fonte de dados/delegado/subclasse
Outro padrão muito comum no Cocoa lida com o fornecimento de dados para elementos de interface do usuário e a reação às interações do usuário. Usando NSTableView
como exemplo, você precisa fornecer de alguma forma os dados para cada linha, algum conjunto de elementos de interface do usuário que representam essa linha, alguns conjuntos de comportamentos para reagir às interações do usuário e, possivelmente, alguma quantidade de personalização. Os padrões de fonte de dados e delegados permitem lidar com a maioria dos casos sem precisar recorrer à subclasse NSTableView
por conta própria.
A
DataSource
propriedade recebe uma instância de uma subclasse personalizada daNSTableViewDataSource
qual é chamada para preencher a tabela com dados (viaGetRowCount
eGetObjectValue
).A
Delegate
propriedade recebe uma instância de uma subclasse personalizada daNSTableViewDelegate
qual fornece a exibição de um determinado objeto de modelo (viaGetViewForItem
) e manipula interações de interface do usuário (viaDidClickTableColumn
,MouseDownInHeaderOfTableColumn
etc.
Em alguns casos, você desejará personalizar um controle de uma maneira além dos ganchos dados no delegado ou na fonte de dados e você pode subclasse o modo de exibição diretamente. No entanto, tenha cuidado, em muitos casos, substituir o comportamento padrão exigirá que você manipule todo esse comportamento por conta própria (personalizar o comportamento de seleção pode exigir que você implemente todos os comportamentos de seleção por conta própria).
No Xamarin.iOS, algumas APIs, como, por UITableView
exemplo, foram estendidas com uma propriedade que implementa o delegado e a fonte de dados (UITableViewSource
). Isso é para contornar a limitação comum de que uma única classe C# só pode ter uma classe base, e nossa exibição de protocolos é feita por meio de classes base.
Para obter mais informações sobre como trabalhar com VIews de tabela em um aplicativo Xamarin.Mac, consulte nossa documentação do Modo de Exibição de Tabela .
Protocolos
Os protocolos em Objective-C podem ser comparados com interfaces em C#e, em muitos casos, são usados em situações semelhantes. Por exemplo, o NSTableView
exemplo acima, tanto o delegado quanto a fonte de dados são, na verdade, protocolos. O Xamarin.Mac os expõe como classes base com métodos virtuais que você pode substituir. A principal diferença entre interfaces C# e Objective-C protocolos é que alguns métodos em um protocolo podem ser opcionais de implementar. Você precisará examinar a documentação e/ou a definição de uma API para determinar o que é opcional.
Mais informações confira nossa documentação delegados, protocolos e eventos .