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ímGetRowCount
aGetObjectValue
).Vlastnost
Delegate
je přiřazena instance vlastní podtřídy, kteráNSTableViewDelegate
poskytuje zobrazení pro daný objekt modelu (prostřednictvímGetViewForItem
) a zpracovává interakce uživatelského rozhraní (prostřednictvímDidClickTableColumn
,MouseDownInHeaderOfTableColumn
atd.).
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í .