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 da NSTableViewDataSource qual é chamada para preencher a tabela com dados (via GetRowCount e GetObjectValue).

  • A Delegate propriedade recebe uma instância de uma subclasse personalizada da NSTableViewDelegate qual fornece a exibição de um determinado objeto de modelo (via GetViewForItem) e manipula interações de interface do usuário (via DidClickTableColumn, MouseDownInHeaderOfTableColumnetc.

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 .