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

V rámci rozhraní Apple API zveřejněných prostřednictvím jazyka C# se některé idiomy a vzorce najdou znovu a znovu. Pokud máte zkušenosti s programováním pomocí Xamarin. iOS, může to vypadat dobře. Dokumentace se často odkazuje na tyto modely a idiomy se tak, aby se zajistilo jejich plné porozumění, což vám pomůže vyrozumět dokumentaci, kterou najdete.

MVC – kontroler zobrazení modelu

Kontroler zobrazení modelu nebo MVC pro krátké je velmi běžný vzor, který se našel v rámci kakaa. Podrobná diskuze je nad rámec tohoto dokumentu, ale v krátkém případě je způsobem, jak svou aplikaci strukturovat, do komponent:

  • Objekty modelu reprezentují podkladová data, která se zobrazují a manipulují (například adresy v adresáři).
  • Zobrazit objekty zpracovávají vykreslování daného objektu na obrazovce a zpracovává interakce uživatele (textové pole zobrazuje adresu na obrazovce).
  • Objekty kontroleru zpracovávají interakci mezi modelem a zobrazením. Přidávají změny modelu nahoru pro aktualizaci zobrazení a vložení "níže" změn ze zobrazení, když uživatelé provedou změny v uživatelském rozhraní.

Pokud jste obeznámeni s MVVM (zobrazení modelů ViewModel) z jiných knihoven, jako je například WPF, kontroler funguje podobně jako ViewModel, ale je často lépe vázán na konkrétní prvky uživatelského rozhraní.

Další podrobnosti najdete tady:

Zdroj dat/delegát/podtřídy

Dalším velmi běžným vzorem v kakau se zabývá poskytování dat prvkům uživatelského rozhraní a reakce na interakce uživatele. Pomocí NSTableView jako příklad musíte nějakým způsobem poskytnout data pro každý řádek, některé sady prvků uživatelského rozhraní, které tento řádek představují, některá sada chování, která bude reagovat na interakce s uživatelem, a případně určité množství přizpůsobení. Zdroje dat a vzory delegáta umožňují zpracovávat většinu případů bez nutnosti roztřídit NSTableView sami sebe.

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

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

V některých případech budete chtít upravit ovládací prvek tak, aby překročilo zavěšení, které je zadáno v delegátu nebo zdroji dat, a můžete zobrazit podtřídou zobrazení přímo. Buďte opatrní, ale v mnoha případech přepsání výchozího chování pak budete vyžadovat, abyste všechny takové chování sami napracovali sami (přizpůsobení chování při výběru může vyžadovat, abyste sami implementovali všechna chování výběru).

V Xamarin. iOS se některá rozhraní API, například UITableView Rozšířená, přerozšířila o vlastnost, která implementuje delegáta i zdroj dat ( UITableViewSource ). To umožňuje obejít 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 tabulkovým zobrazením v aplikaci Xamarin. Mac najdete v dokumentaci k zobrazení tabulky .

Protokoly

Protokoly v nástroji Objective-C lze porovnat s rozhraními v jazyce C# a v mnoha případech jsou používány v podobných situacích. Například NSTableView výše uvedený příklad, delegát i zdroj dat jsou ve skutečnosti protokoly. Xamarin. Mac je zpřístupňuje jako základní třídy s virtuálními metodami, které můžete přepsat. Hlavním rozdílem mezi rozhraními a Objective-C Protokoly jazyka C# je, že některé metody v protokolu mohou být pro implementaci nepovinné. Abyste zjistili, co je volitelné, budete si muset prohlédnout dokumentaci nebo definici rozhraní API.

Další informace najdete v dokumentaci k delegátům, protokolům a událostem .