Běžné vzory a idiomy v Xamarin.Mac

V rámci rozhraní APPLE API vystavených prostřednictvím jazyka C# se některé idiomy a vzory znovu objeví a znovu. Pokud máte zkušenosti s programováním pomocí Xamarin.iOS, můžou vypadat dobře. Dokumentace se často bude na tyto vzory a idioti opakovaně odkazovat, takže když budete mít solidní přehled o nich, pomůže vám to pochopit dokumentaci, kterou najdete.

MVC – Kontroler zobrazení modelu

Model View Controller (neboli MVC pro krátkou dobu) je velmi běžný vzor nalezený v celém Cocoa. Podrobná diskuze je nad rámec tohoto dokumentu, ale stručně řečeno je to způsob strukturování aplikace do komponent:

  • Objekty modelu představují podkladová data, která se zobrazují a manipulují (podobně jako adresy v adresáři).
  • Zobrazení objektů zpracovává výkres daného objektu na obrazovce a zpracovává interakci uživatele (textové pole zobrazující adresu na obrazovce)
  • Objekty kontroleru zpracovávají interakci mezi modelem a zobrazením. Nasdílí změny modelu "nahoru", aby aktualizovaly zobrazení a nasdílely změny "dolů" ze zobrazení, když uživatelé v uživatelském rozhraní dělají změny.

Pokud znáte MVVM (Model ViewModel) z jiných knihoven, jako je WPF, řadič funguje podobně jako Model ViewModel, ale často je úzce svázaný s konkrétními prvky uživatelského rozhraní.

Další podrobnosti najdete tady:

Zdroj dat / delegát / podtřídy

Dalším velmi běžným vzorem v Cocoa je poskytování dat prvků uživatelského rozhraní a reakce na interakce uživatelů. Jako NSTableView příklad je třeba nějak poskytnout data pro každý řádek, některé sady prvků uživatelského rozhraní, které představují tento řádek, některé sady chování pro reakci na interakce uživatelů a možná i určité množství přizpůsobení. Vzory zdroje dat a delegátů umožňují zpracovávat většinu případů, aniž byste se museli pustit do podtřídy NSTableView sami.

  • Vlastnost DataSource je přiřazena instance vlastní podtřídy, která NSTableViewDataSource je volána k naplnění tabulky daty (prostřednictvím GetRowCount a GetObjectValue).

  • Vlastnost Delegate je přiřazena instance vlastní podtřídy, která NSTableViewDelegate poskytuje zobrazení pro daný objekt modelu (prostřednictvím GetViewForItem) a zpracovává interakce uživatelského rozhraní (prostřednictvím DidClickTableColumn, MouseDownInHeaderOfTableColumnatd.).

V některých případech budete chtít ovládací prvek přizpůsobit způsobem nad rámec háků zadaných v delegátovi nebo zdroji dat a zobrazení můžete přímo podtřídět. V mnoha případech však přepsání výchozího chování bude vyžadovat, abyste toto chování zvládli sami (přizpůsobení chování výběru může vyžadovat, abyste implementovali všechna chování výběru sami).

V Xamarin.iOS jsou některá rozhraní API, například UITableView rozšířena o vlastnost, která implementuje delegáta i zdroj dat (UITableViewSource). Jde o běžné omezení, že jedna třída jazyka C# může mít pouze jednu základní třídu a naše zpřístupnění protokolů se provádí prostřednictvím základních tříd.

Další informace o práci s tabulkou VIews v aplikaci Xamarin.Mac najdete v naší dokumentaci k tabulkovému zobrazení .

Protokoly

Protokoly lze Objective-C porovnat s rozhraními v jazyce C# a v mnoha případech se používají v podobných situacích. Například výše uvedený NSTableView příklad, delegát i zdroj dat jsou ve skutečnosti protokoly. Xamarin.Mac je zveřejňuje jako základní třídy pomocí virtuálních metod, které můžete přepsat. Hlavní rozdíl mezi rozhraními jazyka C# a Objective-C protokoly spočívá v tom, že některé metody v protokolu mohou být volitelné k implementaci. Budete se muset podívat na dokumentaci nebo definici rozhraní API, abyste zjistili, co je volitelné.

Další informace najdete v naší dokumentaci delegátů, protokolů a událostí .