Udostępnij za pośrednictwem


Typowe wzorce i idiomy na platformie Xamarin.Mac

W interfejsach API firmy Apple uwidocznionych za pośrednictwem języka C#niektóre idiomy i wzorce pojawiają się ponownie. Jeśli masz doświadczenie w programowaniu za pomocą platformy Xamarin.iOS, mogą one wyglądać znajomo. Dokumentacja często będzie odwoływać się do tych wzorców i idiomów wielokrotnie, więc posiadanie solidnego zrozumienia tych wzorców pomoże Ci zrozumieć dokumentację, którą znajdziesz.

MVC — kontroler widoku modelu

Kontroler widoku modelu (MVC) jest bardzo typowym wzorcem występującym w całej kakao. Szczegółowa dyskusja wykracza poza zakres tego dokumentu, ale krótko mówiąc jest to sposób tworzenia struktury aplikacji w składniki:

  • Obiekty modelu reprezentują dane bazowe, które są wyświetlane i manipulowane (podobnie jak adresy w książce adresowej)
  • Wyświetlanie obiektów obsługuje rysunek danego obiektu na ekranie i obsługę interakcji użytkownika (pole tekstowe pokazujące adres na ekranie)
  • Obiekty kontrolera obsługują interakcję między modelem i widokiem. Wypychają zmiany modelu "w górę", aby zaktualizować widok i wypchnąć zmiany "w dół" z widoku po wprowadzeniu zmian w interfejsie użytkownika.

Jeśli znasz model MVVM (Model View ViewModel) z innych bibliotek, takich jak WPF, kontroler działa podobnie do modelu ViewModel, ale jest często ściślej powiązany z określonymi elementami interfejsu użytkownika.

Więcej informacji można znaleźć tutaj:

Źródło danych/delegowanie/podklasowanie

Innym bardzo typowym wzorcem w narzędziu Cocoa jest dostarczanie danych do elementów interfejsu użytkownika i reagowanie na interakcje użytkowników. Korzystając NSTableView z przykładu, musisz w jakiś sposób podać dane dla każdego wiersza, niektóre zestaw elementów interfejsu użytkownika, które reprezentują ten wiersz, niektóre zachowania reagujące na interakcje użytkowników i ewentualnie pewną ilość dostosowywania. Wzorce źródła danych i delegatów umożliwiają obsługę większości przypadków bez konieczności samodzielnego uciekania się do podklasy NSTableView .

  • Właściwość DataSource jest przypisywana do wystąpienia niestandardowej podklasy, której NSTableViewDataSource wywoływana jest nazwana w celu wypełnienia tabeli danymi (za pośrednictwem i GetRowCountGetObjectValue).

  • Właściwość Delegate jest przypisywana do wystąpienia niestandardowej podklasyNSTableViewDelegate, która udostępnia widok dla danego obiektu modelu (za pośrednictwem ) i obsługuje interakcje interfejsu użytkownika (za pośrednictwem DidClickTableColumnGetViewForItem, MouseDownInHeaderOfTableColumnitp.).

W niektórych przypadkach należy dostosować kontrolkę w sposób wykraczający poza haki podane w delegatu lub źródle danych, a widok można podklasować bezpośrednio. Zachowaj ostrożność, jednak w wielu przypadkach zastąpienie domyślnego zachowania będzie wymagać samodzielnego obsługi wszystkich tych zachowań (dostosowanie zachowania wyboru może wymagać samodzielnego zaimplementowania wszystkich zachowań wyboru).

W środowisku Xamarin.iOS niektóre interfejsy API, takie jak UITableView zostały rozszerzone z właściwością implementającą zarówno delegata, jak i źródła danych (UITableViewSource). Pozwala to obejść typowe ograniczenie, że jedna klasa języka C# może mieć tylko jedną klasę bazową, a tworzenie protokołów odbywa się za pomocą klas bazowych.

Aby uzyskać więcej informacji na temat pracy z tabelą VIews w aplikacji platformy Xamarin.Mac, zobacz naszą dokumentację widoku tabel.

Protokoły

Protokoły w programie Objective-C można porównać z interfejsami w języku C#, a w wielu przypadkach są używane w podobnych sytuacjach. Na przykład w powyższym przykładzie NSTableView delegat i źródło danych są rzeczywiście protokołami. Środowisko Xamarin.Mac uwidacznia je jako klasy bazowe za pomocą metod wirtualnych, które można zastąpić. Podstawową różnicą między interfejsami i Objective-C protokołami języka C# jest to, że niektóre metody w protokole mogą być opcjonalne do zaimplementowania. Aby określić, co jest opcjonalne, należy zapoznać się z dokumentacją i/lub definicją interfejsu API.

Więcej informacji można znaleźć w dokumentacji delegatów, protokołów i zdarzeń .