Sdílet prostřednictvím


Vytvoření aplikace Xamarin.iOS pomocí rozhraní Reflection API

The MT. Rozhraní API reflexe D umožňuje, aby třídy byly zdobeny atributy, které MT. D používá k automatickému vytváření obrazovek. Rozhraní API reflexe poskytuje vazbu mezi těmito třídami a obsahem zobrazeným na obrazovce. I když toto rozhraní API neposkytuje jemně odstupňované řízení, které rozhraní API prvků dělá, snižuje složitost tím, že automaticky vytváří hierarchii prvků na základě dekorace třídy.

Nastavení MT. D

MT. D se distribuuje s Xamarin.iOS. Pokud ho chcete použít, klikněte pravým tlačítkem myši na uzel Odkazy projektu Xamarin.iOS v sadě Visual Studio 2017 nebo Visual Studio pro Mac a přidejte odkaz na sestavení MonoTouch.Dialog-1. Potom podle potřeby přidejte using MonoTouch.Dialog do zdrojového kódu příkazy.

Začínáme s rozhraním Reflection API

Použití rozhraní Reflection API je jednoduché jako:

  1. Vytvoření třídy zdobené mt. Atributy D.
  2. Vytvoříte BindingContext instanci a předáte ji instanci výše uvedené třídy.
  3. Vytvoření , DialogViewController předání .BindingContext’s RootElement

Podívejme se na příklad, který ukazuje, jak používat rozhraní Reflection API. V tomto příkladu vytvoříme jednoduchou obrazovku pro zadávání dat, jak je znázorněno níže:

V tomto příkladu vytvoříme jednoduchou obrazovku pro zadávání dat, jak je znázorněno tady.

Vytvoření třídy pomocí MT Atributy D

První věc, kterou potřebujeme použít rozhraní Reflection API, je třída zdobená atributy. Tyto atributy bude používat MT. D interně pro vytváření objektů z rozhraní Elements API. Představte si například následující definici třídy:

public class Expense
{
    [Section("Expense Entry")]

    [Entry("Enter expense name")]
    public string Name;

    [Section("Expense Details")]

    [Caption("Description")]
    [Entry]
    public string Details;

    [Checkbox]
    public bool IsApproved = true;
}

Výsledkem SectionAttribute budou oddíly vytvořeného UITableView řetězce s argumentem řetězce použitým k naplnění hlavičky oddílu. Jakmile je oddíl deklarován, bude každé pole, které následuje, zahrnuty do této části, dokud nebude deklarován jiný oddíl. Typ prvku uživatelského rozhraní vytvořený pro pole bude záviset na typu pole a MT. D atribut decorating it.

Například Name pole je a string je zdobeno .EntryAttribute Výsledkem je přidání řádku do tabulky s textovým polem pro zadávání a zadaným titulkem. IsApproved Podobně je pole se bool CheckboxAttributezaškrtávacím políkem na pravé straně buňky tabulky. MT. D používá název pole, automaticky přidává mezeru k vytvoření titulku v tomto případě, protože není zadán v atributu.

Přidání BindingContextu

Abychom mohli třídu použítExpense, musíme vytvořit .BindingContext A BindingContext je třída, která vytvoří vazbu dat z atributu třídy k vytvoření hierarchie prvků. Abychom ho vytvořili, jednoduše vytvoříme instanci a předáme instanci atributové třídy konstruktoru.

Pokud například chcete přidat uživatelské rozhraní, které jsme deklarovali pomocí atributu Expense ve třídě, přidejte do FinishedLaunching metody metody AppDelegatenásledující kód:

var expense = new Expense ();
var bctx = new BindingContext (null, expense, "Create a task");

Pak stačí, když uživatelské rozhraní vytvoříme, přidáme BindingContext ho do DialogViewController okna a nastavíme ho jako RootViewController okno, jak je znázorněno níže:

UIWindow window;

public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{   
    window = new UIWindow (UIScreen.MainScreen.Bounds);

    var expense = new Expense ();
    var bctx = new BindingContext (null, expense, "Create a task");
    var dvc = new DialogViewController (bctx.Root);

    window.RootViewController = dvc;
    window.MakeKeyAndVisible ();

    return true;
}

Spuštění aplikace teď vede k zobrazení obrazovky zobrazené výše.

Přidání uiNavigationController

Všimněte si ale, že název "Vytvořit úkol", který jsme předali do seznamu BindingContext , se nezobrazuje. Je to proto, že DialogViewController není součástí UINavigatonController. Pojďme změnit kód, který přidá UINavigationController jako okno RootViewController, , a přidáme DialogViewController jako kořen kořenového UINavigationController adresáře, jak je znázorněno níže:

nav = new UINavigationController(dvc);
window.RootViewController = nav;

Když teď spustíme aplikaci, zobrazí se název na navigačním UINavigationController’s panelu, jak ukazuje následující snímek obrazovky:

Když teď spustíme aplikaci, zobrazí se název na navigačním panelu UINavigationControllers.

Zahrnutím UINavigationController, nyní můžeme využít další funkce MT. D, pro kterou je navigace nutná. Do třídy můžeme například přidat výčet Expense , který definuje kategorii pro výdaje a MT. D automaticky vytvoří obrazovku výběru. Chcete-li předvést, upravte Expense třídu tak, aby zahrnovala ExpenseCategory pole následujícím způsobem:

public enum Category
{
    Travel,
    Lodging,
    Books
}

public class Expense
{
    …

    [Caption("Category")]
    public Category ExpenseCategory;
}

Spuštění aplikace teď vede k novému řádku v tabulce pro kategorii, jak je znázorněno na obrázku:

Spuštění aplikace teď vede k novému řádku v tabulce pro kategorii, jak je znázorněno.

Výběrem řádku přejde aplikace na novou obrazovku s řádky odpovídajícími výčtu, jak je znázorněno níže:

Výběr řádku způsobí, že aplikace přejde na novou obrazovku s řádky odpovídajícími výčtu.

Shrnutí

Tento článek představil návod k rozhraní Reflection API. Ukázali jsme, jak přidat atributy do třídy pro řízení toho, co se zobrazí. Také jsme probrali, jak použít BindingContext k vytvoření vazby dat z třídy na hierarchii prvků a jak používat MT. D s .UINavigationController