Erstellen einer Xamarin.iOS-Anwendung mithilfe der Reflektions-API

Die MT. Die D-Reflektions-API ermöglicht es, Klassen mit Attributen zu versehen, die mt. D verwendet, um Automatisch Bildschirme zu erstellen. Die Reflektions-API stellt eine Bindung zwischen diesen Klassen und dem, was auf dem Bildschirm angezeigt wird, bereit. Obwohl diese API nicht das differenzierte Steuerelement bereitstellt, das die Element-API ausführt, reduziert sie die Komplexität, indem die Elementhierarchie automatisch basierend auf der Klassendekoration erstellt wird.

Einrichten von MT. D

MT. D wird mit Xamarin.iOS verteilt. Klicken Sie dazu mit der rechten Maustaste auf den Knoten Verweise eines Xamarin.iOS-Projekts in Visual Studio 2017 oder Visual Studio für Mac, und fügen Sie einen Verweis auf die MonoTouch.Dialog-1-Assembly hinzu. Fügen Sie dann nach Bedarf Anweisungen im Quellcode hinzu using MonoTouch.Dialog .

Erste Schritte mit der Reflektions-API

Die Verwendung der Reflektions-API ist so einfach wie:

  1. Erstellen einer Klasse, die mit MT ergänzt wird. D-Attribute.
  2. Erstellen eines BindingContext instance und Übergeben eines instance der obigen Klasse.
  3. Erstellen eines DialogViewController , übergeben sie den BindingContext’sRootElement .

Sehen wir uns ein Beispiel an, um die Verwendung der Reflektions-API zu veranschaulichen. In diesem Beispiel erstellen wir wie unten gezeigt einen einfachen Bildschirm für die Dateneingabe:

In diesem Beispiel erstellen wir einen einfachen Dateneingabebildschirm, wie hier gezeigt

Erstellen einer Klasse mit MT. D-Attribute

Das erste, was wir verwenden müssen, ist eine Klasse, die mit Attributen versehen ist. Diese Attribute werden von MT verwendet. D intern, um Objekte aus der Elements-API zu erstellen. Betrachten Sie beispielsweise die folgende Klassendefinition:

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;
}

Führt SectionAttribute zu Abschnitten der UITableView zu erstellenden, mit dem Zeichenfolgenargument, das zum Auffüllen des Abschnittsheaders verwendet wird. Sobald ein Abschnitt deklariert wurde, wird jedes Feld, das darauf folgt, in diesen Abschnitt aufgenommen, bis ein anderer Abschnitt deklariert wird. Der Typ des für das Feld erstellten Benutzeroberflächenelements hängt vom Typ des Felds und dem MT ab. D-Attribut, das es ergänzt.

Das Feld ist z. B Name . ein string und wird mit einem EntryAttributeergänzt. Dies führt dazu, dass der Tabelle eine Zeile mit einem Texteingabefeld und dem angegebenen Untertitel hinzugefügt wird. Auf ähnliche Weise ist das IsApproved Feld ein bool mit einem CheckboxAttribute, was zu einer Tabellenzeile mit einem Kontrollkästchen rechts neben der Tabellenzelle führt. MT. D verwendet den Feldnamen und fügt automatisch ein Leerzeichen hinzu, um die Untertitel in diesem Fall zu erstellen, da er nicht in einem Attribut angegeben ist.

Hinzufügen von BindingContext

Um die Expense -Klasse zu verwenden, müssen wir eine BindingContexterstellen. Eine BindingContext ist eine Klasse, die die Daten aus der attributierten Klasse bindet, um die Hierarchie von Elementen zu erstellen. Um eine zu erstellen, instanziieren wir sie einfach und übergeben eine instance der attributierten Klasse an den Konstruktor.

Um beispielsweise eine Benutzeroberfläche hinzuzufügen, die wir mit dem -Attribut in der Expense -Klasse deklariert haben, schließen Sie den folgenden Code in die FinishedLaunching -Methode von ein AppDelegate:

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

Zum Erstellen der Benutzeroberfläche müssen wir dann nur noch den BindingContextDialogViewController hinzufügen und als den RootViewController des Fensters festlegen, wie unten gezeigt:

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;
}

Wenn Sie die Anwendung ausführen, wird nun der oben gezeigte Bildschirm angezeigt.

Hinzufügen eines UINavigationControllers

Beachten Sie jedoch, dass der Titel "Aufgabe erstellen", den wir an die BindingContext übergeben haben, nicht angezeigt wird. Dies liegt daran, dass nicht DialogViewController Teil eines UINavigatonControllerist. Ändern Sie den Code, um ein UINavigationController als Fenster RootViewController, hinzuzufügen, und fügen Sie den DialogViewController als Stamm des UINavigationController hinzu, wie unten gezeigt:

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

Beim Ausführen der Anwendung wird der Titel nun in der UINavigationController’s Navigationsleiste angezeigt, wie der folgende Screenshot zeigt:

Wenn wir nun die Anwendung ausführen, wird der Titel in der Navigationsleiste von UINavigationControllers angezeigt.

Durch das Einschließen von UINavigationControllerkönnen wir jetzt andere Features von MT nutzen. D, für das Navigation erforderlich ist. Beispielsweise können wir der Expense -Klasse eine Enumeration hinzufügen, um die Kategorie für die Spesen und MT zu definieren. D erstellt automatisch einen Auswahlbildschirm. Um dies zu veranschaulichen, ändern Sie die Expense -Klasse wie folgt, um ein ExpenseCategory Feld einzuschließen:

public enum Category
{
    Travel,
    Lodging,
    Books
}

public class Expense
{
    …

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

Das Ausführen der Anwendung führt nun wie gezeigt zu einer neuen Zeile in der Tabelle für die Kategorie:

Das Ausführen der Anwendung führt nun wie gezeigt zu einer neuen Zeile in der Tabelle für die Kategorie.

Wenn Sie die Zeile auswählen, navigiert die Anwendung zu einem neuen Bildschirm mit Zeilen, die der Enumeration entsprechen, wie unten gezeigt:

Wenn Sie die Zeile auswählen, navigiert die Anwendung zu einem neuen Bildschirm mit Zeilen, die der Enumeration entsprechen

Zusammenfassung

In diesem Artikel wurde eine exemplarische Vorgehensweise der Reflektions-API vorgestellt. Wir haben gezeigt, wie Sie einer Klasse Attribute hinzufügen, um zu steuern, was angezeigt wird. Außerdem wurde erläutert, wie Sie mithilfe von Daten BindingContext aus einer Klasse an die erstellte Elementhierarchie binden können, sowie die Verwendung von MT. D mit einem UINavigationController.