Patrones y expresiones comunes en Xamarin.Mac
En las API de Apple expuestas a través de C#, ciertos patrones y expresiones se exponen una y otra vez. Si tiene experiencia con la programación con Xamarin.iOS, puede resultarle familiar. La documentación a menudo hará referencia a estos patrones y expresiones repetidamente, por lo que tener un conocimiento sólido de ellos le ayudará a comprender la documentación que encuentre.
MVC: controlador de vista de modelos
El controlador de vista de modelos, o MVC en resumen, es un patrón muy común que se encuentra en Cocoa. Una explicación detallada está fuera del ámbito de este documento, pero en resumen es una manera de estructurar la aplicación en componentes:
- Los objetos de modelo representan los datos subyacentes que se ven y manipulan (como las direcciones de una libreta de direcciones)
- Los objetos de vista controlan el dibujo de un objeto determinado en la pantalla y controlan la interacción del usuario (un campo de texto que muestra la dirección en pantalla)
- Los objetos de controlador controlan la interacción entre el modelo y la vista. Insertan los cambios del modelo "arriba" para actualizar la vista e insertar los cambios de "abajo" de la vista cuando los usuarios realicen cambios en la interfaz de usuario.
Si está familiarizado con MVVM (Modelo de vista de modelo) de otras bibliotecas como WPF, el controlador actúa de forma similar a ViewModel, pero a menudo está más estrechamente enlazado a los elementos específicos de la interfaz de usuario.
Puede encontrar más detalles aquí:
Origen de datos/delegado/subclases
Otro patrón muy común en Cocoa se refiere a proporcionar datos a los elementos de la interfaz de usuario y reaccionar a las interacciones del usuario. Como ejemplo, debe proporcionar de algún modo los datos de cada fila, algún conjunto de elementos de la interfaz de usuario que representan esa fila, algún conjunto de comportamientos para reaccionar a las interacciones del usuario y, posiblemente, alguna cantidad de NSTableView personalización. Los patrones de origen de datos y delegado le permiten controlar la mayoría de los casos sin tener que recurrir a las subclases NSTableView usted mismo.
A la propiedad se le asigna una instancia de una subclase personalizada de la que se llama para rellenar la tabla con
DataSourceNSTableViewDataSourcedatos (a través de yGetRowCountGetObjectValue).A la propiedad se le asigna una instancia de una subclase personalizada de que proporciona la vista para un objeto de modelo determinado (a través de ) y controla las interacciones de la interfaz de usuario (a través
DelegateNSTableViewDelegatede , ,GetViewForItemDidClickTableColumnMouseDownInHeaderOfTableColumnetc.).
En algunos casos, querrá personalizar un control de una manera más allá de los enlaces dados en el delegado o el origen de datos y puede crear subclases de la vista directamente. Sin embargo, tenga cuidado, en muchos casos, invalidar el comportamiento predeterminado requerirá que usted mismo controle todo ese comportamiento (la personalización del comportamiento de selección puede requerir que implemente todos los comportamientos de selección usted mismo).
En Xamarin.iOS, algunas API, como se han ampliado con una propiedad que implementa el delegado y UITableView el origen de datos ( UITableViewSource ). Esto es para evitar la limitación común de que una sola clase de C# solo puede tener una clase base y la salida de protocolos se realiza a través de clases base.
Para obtener más información sobre cómo trabajar con VIews de tabla en una aplicación de Xamarin.Mac, consulte nuestra documentación de table view.
Protocolos
Los protocolos Objective-C de se pueden comparar con las interfaces de C#, y en muchos casos se usan en situaciones similares. Por ejemplo, NSTableView en el ejemplo anterior, el delegado y el origen de datos son realmente protocolos. Xamarin.Mac los expone como clases base con métodos virtuales que puede invalidar. La diferencia principal entre las interfaces y los protocolos de C# es que algunos métodos de Objective-C un protocolo pueden ser opcionales de implementar. Tendrá que ver la documentación o la definición de una API para determinar qué es opcional.
Para más información, consulte nuestra documentación sobre delegados, protocolos y eventos.