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:
- Erstellen einer Klasse, die mit MT ergänzt wird. D-Attribute.
- Erstellen eines
BindingContext
instance und Übergeben eines instance der obigen Klasse. - Erstellen eines
DialogViewController
, übergeben sie denBindingContext’s
RootElement
.
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:
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 EntryAttribute
ergä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 BindingContext
erstellen. 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 BindingContext
DialogViewController
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 UINavigatonController
ist. Ä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:
Durch das Einschließen von UINavigationController
kö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:
Wenn Sie die Zeile auswählen, navigiert die Anwendung zu einem neuen Bildschirm mit Zeilen, die der Enumeration entsprechen, wie unten gezeigt:
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
.
Verwandte Links
- MTDReflectionWalkthrough (Beispiel)
- Einführung in das MonoTouch-Dialogfeld
- Exemplarische Vorgehensweise für die Element-API
- Exemplarische Vorgehensweise für JSON-Elemente
- MonoTouch-Dialogfeld auf GitHub
- TweetStation-Anwendung
- UITableViewController-Klassenreferenz
- UINavigationController-Klassenreferenz