Teilen über


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

Der MT. Mit der D Reflection-API können Klassen mit Attributen versehen werden, die MT aufweisen. D verwendet zum automatischen Erstellen von Bildschirmen. Die Spiegelungs-API stellt eine Bindung zwischen diesen Klassen und dem, was auf dem Bildschirm angezeigt wird, bereit. Obwohl diese API nicht das fein abgestimmte Steuerelement bereitstellt, das die Element-API ausführt, reduziert sie die Komplexität, indem sie die Elementhierarchie basierend auf der Klassendeko automatisch aufbaut.

Einrichten von MT. D

MT. D wird mit Xamarin.iOS verteilt. Zum Verwenden klicken Sie 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 using MonoTouch.Dialog dann nach Bedarf Anweisungen in Ihrem Quellcode hinzu.

Erste Schritte mit der Reflection-API

Die Verwendung der Spiegelungs-API ist so einfach wie:

  1. Erstellen einer Klasse, die mit MT ausgestattet ist. D-Attribute.
  2. Erstellen einer BindingContext Instanz, übergeben Sie sie an eine Instanz der obigen Klasse.
  3. Erstellen eines DialogViewController , übergeben sie die BindingContext’sRootElement .

Sehen wir uns ein Beispiel an, um zu veranschaulichen, wie die Reflection-API verwendet wird. In diesem Beispiel erstellen wir wie unten gezeigt einen einfachen Dateneingabebildschirm:

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

Erstellen einer Klasse mit MT. D-Attribute

Als Erstes müssen wir die Reflection-API verwenden, eine Klasse, die mit Attributen versehen ist. Diese Attribute werden von MT verwendet. D intern zum Erstellen von Objekten aus der Element-API. 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;
}

Dies SectionAttribute führt zu Abschnitten der UITableView Erstellung, wobei das Zeichenfolgenargument verwendet wird, um die Kopfzeile des Abschnitts aufzufüllen. Sobald ein Abschnitt deklariert wurde, wird jedes folgende Feld in diesen Abschnitt eingeschlossen, bis ein anderer Abschnitt deklariert wird. Der Typ des für das Feld erstellten Benutzeroberflächenelements hängt vom Typ des Felds und vom MT ab. D-Attribut, das es schmückt.

Das Feld ist z. B Name . ein string Feld, und es ist mit einem EntryAttributeversehen. Dies führt dazu, dass der Tabelle eine Zeile mit einem Texteingabefeld und dem angegebenen Untertitel hinzugefügt wird. Ebenso ist das IsApproved Feld ein bool mit einem CheckboxAttribute, was zu einer Tabellenzeile mit einem Kontrollkästchen auf der rechten Seite der Tabellenzelle führt. MT. D verwendet den Feldnamen, der automatisch ein Leerzeichen hinzufügt, 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 BindingContext. A BindingContext ist eine Klasse, die die Daten aus der attributten Klasse bindet, um die Hierarchie von Elementen zu erstellen. Zum Erstellen einer Instanz instanziieren wir sie einfach und übergeben eine Instanz der attributierter Klasse an den Konstruktor.

Wenn Sie beispielsweise eine Benutzeroberfläche hinzufügen möchten, die wir mithilfe des Attributs in der Expense Klasse deklariert haben, fügen Sie den folgenden Code in die FinishedLaunching Methode der :AppDelegate

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

Dann müssen wir nur noch tun, um die Benutzeroberfläche zu erstellen, der DialogViewController sie hinzugefügt BindingContext und als Fenster RootViewController festgelegt wird, wie unten dargestellt:

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 UINavigationController

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

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

Wenn wir die Anwendung jetzt ausführen, wird der Titel in der UINavigationController’s Navigationsleiste angezeigt, wie der folgende Screenshot zeigt:

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

Durch die Einbeziehung eines UINavigationController, können wir jetzt andere Features von MT nutzen. D für die Navigation erforderlich ist. Beispielsweise können wir der Expense Klasse eine Enumeration hinzufügen, um die Kategorie für die Spesenkosten 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;
}

Wenn Sie die Anwendung ausführen, wird nun eine neue Zeile in der Tabelle für die Kategorie wie gezeigt angezeigt:

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

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

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 Reflection-API vorgestellt. Wir haben gezeigt, wie Sie einer Klasse Attribute hinzufügen, um zu steuern, was angezeigt wird. Darüber hinaus wurde erläutert, wie BindingContext Daten aus einer Klasse an die erstellte Elementhierarchie gebunden werden, sowie wie MT verwendet wird. D mit einem UINavigationController.