Úvod do MonoTouch.Dialog pro Xamarin.iOS

MonoTouch.Dialog, označovaný jako MT. Stručně řečeno, je rychlá sada nástrojů pro vývoj uživatelského rozhraní, která vývojářům umožňuje vytvářet obrazovky aplikací a navigaci s využitím informací, nikoli tedium vytváření kontrolerů zobrazení, tabulek atd. Poskytuje tak významné zjednodušení vývoje uživatelského rozhraní a snížení kódu. Představte si například následující snímek obrazovky:

For example, consider this screenshot

K definování celé obrazovky se použil následující kód:

public enum Category
{
    Travel,
    Lodging,
    Books
}
        
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;
    [Caption("Category")]
    public Category ExpenseCategory;
}

Při práci s tabulkami v iOSu je často tuna opakujícího se kódu. Například pokaždé, když je tabulka potřebná, je potřeba zdroj dat k naplnění této tabulky. V aplikaci se dvěma obrazovkami založenými na tabulce, které jsou připojené přes navigační ovladač, sdílí každá obrazovka hodně stejného kódu.

MT. D to zjednodušuje zapouzdřením veškerého kódu do obecného rozhraní API pro vytvoření tabulky. Pak poskytuje abstrakci nad tímto rozhraním API, která umožňuje syntaxi deklarativní vazby objektů, která usnadňuje. V MT jsou k dispozici dvě rozhraní API. D:

  • Rozhraní API elementů nízké úrovně – Rozhraní Elements API je založeno na vytvoření hierarchálního stromu prvků, které představují obrazovky a jejich komponenty. Rozhraní Elements API poskytuje vývojářům největší flexibilitu a kontrolu při vytváření uživatelských rozhraní. Kromě toho má rozhraní Elements API pokročilou podporu deklarativní definice prostřednictvím formátu JSON, což umožňuje neuvěřitelně rychlou deklaraci i dynamické generování uživatelského rozhraní ze serveru.
  • Rozhraní API vysoké úrovně Reflexe – označuje se také jako rozhraní API vazby, ve kterých třídy jsou opatřeny poznámkami s nápovědou uživatelského rozhraní a pak MT. D automaticky vytváří obrazovky založené na objektech a poskytuje vazbu mezi zobrazenými (a volitelně upravovanými) na obrazovce a podkladovým objektem. Výše uvedený příklad znázorňuje použití rozhraní API Reflexe ion. Toto rozhraní API neposkytuje jemně odstupňované řízení, které rozhraní API elementů dělá, ale snižuje složitost ještě více tím, že automaticky vytváří hierarchii prvků na základě atributů třídy.

MT. D se dodává s velkou sadou integrovaných prvků uživatelského rozhraní pro vytváření obrazovky, ale také rozpozná potřebu přizpůsobených prvků a pokročilých rozložení obrazovky. Rozšiřitelnost je tedy prvotřídní funkce pečená do rozhraní API. Vývojáři můžou stávající prvky rozšířit nebo vytvořit nové a bezproblémově integrovat.

Kromě toho MT. D obsahuje řadu běžných funkcí uživatelského prostředí pro iOS, jako je podpora "aktualizace", asynchronní načítání obrázků a podpora vyhledávání.

Tento článek se zabývá komplexním pohledem na práci s MT. D, včetně:

  • MT. D Components – To se zaměří na pochopení tříd, které tvoří MT. D, aby bylo možné rychle zrychlit.
  • Reference k prvkům – komplexní seznam předdefinovaných prvků MT.D.
  • Rozšířené využití – To se zabývá pokročilými funkcemi, jako jsou aktualizace, vyhledávání, načítání obrázků na pozadí, použití LINQ k vytváření hierarchií prvků a vytváření vlastních prvků, buněk a kontrolerů pro použití s MT.D.

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.

Pochopení částí MT. D

I když používáte rozhraní API Reflexe ion, MT. D vytvoří hierarchii elementů pod kapotou, stejně jako kdyby byla vytvořena přímo prostřednictvím rozhraní Elements API. Podpora JSON uvedená v předchozí části také vytvoří elementy. Z tohoto důvodu je důležité mít základní znalosti o základních částech MT.D.

MT. D sestavuje obrazovky s následujícími čtyřmi částmi:

  • DialogViewController
  • RootElement
  • Sekce
  • Element

DialogViewController

DialogViewController nebo DVC pro krátké, dědí z UITableViewController a proto představuje obrazovku s tabulkou. DvCs lze nasdílit na navigační ovladač stejně jako běžný UITableViewController.

RootElement

RootElement je kontejner nejvyšší úrovně pro položky, které se přecházejí do DVC. Obsahuje oddíly, které pak mohou obsahovat elementy. RootElements nejsou vykresleny; místo toho jsou jednoduše kontejnery pro to, co se skutečně vykresluje. RootElement je přiřazen k DVC a potom DVC vykresluje své podřízené položky.

Sekce

Oddíl je skupina buněk v tabulce. Stejně jako u normálního oddílu tabulky může mít volitelně záhlaví a zápatí, které může být text nebo dokonce vlastní zobrazení, jako na následujícím snímku obrazovky:

As with a normal table section, it can optionally have a header and footer that can either be text, or even custom views, as in this screenshot

Element (Prvek)

Element představuje skutečnou buňku v tabulce. MT. D je dodáván s širokou škálou prvků, které představují různé datové typy nebo různé vstupy. Například následující snímky obrazovky znázorňují několik dostupných prvků:

For example, this screenshots illustrate a few of the available elements

Další informace o oddílech a kořenech

Pojďme se teď podrobněji zabývat rootElements a oddíly.

RootElements

Ke spuštění procesu MonoTouch.Dialog je potřeba alespoň jeden RootElement.

Pokud je RootElement inicializován s hodnotou oddílu nebo elementu, tato hodnota se použije k vyhledání podřízeného elementu, který poskytne souhrn konfigurace, který se zobrazí na pravé straně zobrazení. Na následujícím snímku obrazovky je například tabulka vlevo s buňkou, která obsahuje název obrazovky s podrobnostmi vpravo, "Dezerty" spolu s hodnotou vybrané pouště.

This screenshot shows a table on the left with a cell containing the title of the detail screen on the right, Dessert, along with the value of the selected desertThis screenshot below shows a table on the left with a cell containing the title of the detail screen on the right, Dessert, along with the value of the selected desert

Kořenové prvky lze také použít uvnitř oddílů k aktivaci načtení nové vnořené konfigurační stránky, jak je znázorněno výše. Při použití v tomto režimu se popis použije při vykreslení uvnitř oddílu a použije se také jako název podstránky. Příklad:

var root = new RootElement ("Meals") {
    new Section ("Dinner") {
        new RootElement ("Dessert", new RadioGroup ("dessert", 2)) {
            new Section () {
                new RadioElement ("Ice Cream", "dessert"),
                new RadioElement ("Milkshake", "dessert"),
                new RadioElement ("Chocolate Cake", "dessert")
            }
        }
    }
};

Když uživatel v předchozím příkladu klepne na "Dezert", MonoTouch.Dialog vytvoří novou stránku a přejde na ni s kořenem "Dezert" a má skupinu rádia se třemi hodnotami.

V této konkrétní ukázce skupina rádia vybere "Čokoládový dort" v části "Dezerty", protože jsme předali hodnotu "2" RadioGroup. To znamená, že vyberete třetí položku v seznamu (nulový index).

Volání metody Add nebo použití syntaxe inicializátoru C# 4 přidává oddíly. Metody Insert jsou k dispozici pro vložení oddílů s animací.

Pokud vytvoříte RootElement s instancí skupiny (místo RadioGroup), souhrnná hodnota RootElement při zobrazení v oddílu bude kumulativní počet všech logickýchelements a CheckboxElements, které mají stejný klíč jako hodnota Group.Key.

Oddíly

Oddíly se používají k seskupení prvků na obrazovce a jsou to jediné platné přímé podřízené položky RootElement. Oddíly můžou obsahovat libovolný ze standardních prvků, včetně nových RootElements.

RootElements vložené do oddílu slouží k přechodu na novou hlubší úroveň.

Oddíly můžou mít záhlaví a zápatí buď jako řetězce, nebo jako uiViews. Obvykle budete používat pouze řetězce, ale k vytvoření vlastních uživatelských rozhraní můžete použít libovolné UIView jako záhlaví nebo zápatí. Řetězec můžete použít k jejich vytvoření takto:

var section = new Section ("Header", "Footer");

Pokud chcete použít zobrazení, stačí předat zobrazení konstruktoru:

var header = new UIImageView (Image.FromFile ("sample.png"));
var section = new Section (header);

Oznámení

Zpracování NSAction

MT. D zobrazí NSAction jako delegáta pro zpracování zpětných volání. Řekněme například, že chcete zpracovat dotykovou událost pro buňku tabulky vytvořenou mt.D. Při vytváření elementu pomocí MT. D, jednoduše zadejte funkci zpětného volání, jak je znázorněno níže:

new Section () {
    new StringElement ("Demo Callback", delegate { Console.WriteLine ("Handled"); })
}

Načítání hodnoty elementu

V kombinaci s Element.Value vlastností může zpětné volání načíst hodnotu nastavenou v jiných elementech. Představte si například následující kód:

var element = new EntryElement (task.Name, "Enter task description", task.Description);
                
var taskElement = new RootElement (task.Name) {
    new Section () { element },
    new Section () { new DateElement ("Due Date", task.DueDate) },
    new Section ("Demo Retrieving Element Value") {
        new StringElement ("Output Task Description", delegate { Console.WriteLine (element.Value); })
    }
};

Tento kód vytvoří uživatelské rozhraní, jak je znázorněno níže. Úplný návod k tomuto příkladu najdete v kurzu Průvodce rozhraním Elements API.

Combined with the Element.Value property, the callback can retrieve the value set in other elements

Když uživatel stiskne dolní buňku tabulky, spustí se kód anonymní funkce a zapíše hodnotu z element instance do oblasti Výstup aplikace v Visual Studio pro Mac.

Předdefinované prvky

MT. D obsahuje řadu předdefinovaných položek buněk tabulky, které se označují jako Elementy. Tyto prvky se používají k zobrazení různých typů v buňkách tabulky, jako jsou řetězce, plovoucí hodnoty, kalendářní data a dokonce obrázky, a pojmenovávají se jen pár. Každý prvek se postará o správné zobrazení datového typu. Například logický prvek zobrazí přepínač, který přepne jeho hodnotu. Podobně plovoucí prvek zobrazí posuvník pro změnu hodnoty float.

Existují ještě složitější prvky, které podporují bohatší datové typy, jako jsou obrázky a html. Například html element, který otevře UIWebView pro načtení webové stránky při výběru, zobrazí popis v buňce tabulky.

Práce s hodnotami elementů

Prvky, které se používají k zachycení vstupu uživatele, zpřístupňují veřejnou Value vlastnost, která obsahuje aktuální hodnotu prvku kdykoli. Aktualizuje se automaticky, protože uživatel aplikaci používá.

Toto je chování pro všechny prvky, které jsou součástí MonoTouch.Dialog, ale není nutné pro uživatelem vytvořené prvky.

String Element

A StringElement zobrazuje popis na levé straně buňky tabulky a řetězcovou hodnotu na pravé straně buňky.

A StringElement shows a caption on the left side of a table cell and the string value on the right side of the cell

Pokud chcete použít StringElement tlačítko jako tlačítko, zadejte delegáta.

new StringElement ("Click me", () => { 
    new UIAlertView("Tapped", "String Element Tapped", null, "ok", null).Show();
});

To use a StringElement as a button, provide a delegate

Styled String Element

A StyledStringElement umožňuje zobrazení řetězců pomocí předdefinovaných stylů buněk tabulky nebo vlastního formátování.

A StyledStringElement allows strings to be presented using either built-in table cell styles or with custom formatting

Třída StyledStringElement je odvozena od StringElement, ale umožňuje vývojářům přizpůsobit několik vlastností, jako je Písmo, barva textu, barva buňky pozadí, režim přerušení čáry, počet řádků, které se mají zobrazit, a zda má být zobrazeno příslušenství.

Multiline Element

Multiline Element

Entry Element

Jak EntryElementuž název napovídá, slouží k získání uživatelského vstupu. Podporuje buď běžné řetězce, nebo hesla, kde jsou znaky skryté.

The EntryElement is used to get user input

Inicializuje se se třemi hodnotami:

  • Popis pro položku, která se uživateli zobrazí.
  • Zástupný text (jedná se o šedě zobrazený text, který uživateli poskytuje nápovědu).
  • Hodnota textu.

Zástupný symbol a hodnota mohou být null. Je však nutné popis.

V libovolném okamžiku může přístup k vlastnosti Value načíst hodnotu EntryElement.

KeyboardType Vlastnost lze navíc nastavit při vytváření na styl typu klávesnice požadovaný pro zadávání dat. Můžete ho použít ke konfiguraci klávesnice pomocí hodnot UIKeyboardType uvedených níže:

  • Číslo
  • telefonní
  • URL
  • E-mail

Boolean Element

Boolean Element

Prvek zaškrtávacího políčka

Checkbox Element

Radio Element

A RadioElement vyžaduje RadioGroup , aby byla zadána v sadě RootElement.

mtRoot = new RootElement ("Demos", new RadioGroup("MyGroup", 0));

A RadioElement requires a RadioGroup to be specified in the RootElement

RootElements jsou používány také ke koordinaci radioaktivit. Členové RadioElement můžou zahrnovat více oddílů (například pro implementaci něco podobného selektoru vyzváněcího tónu a oddělit vlastní vyzváněcí tóny od systémových vyzváněcích tónů). Souhrnné zobrazení zobrazí přepínač, který je aktuálně vybrán. Pokud to chcete použít, vytvořte pomocí RootElement konstruktoru skupiny, například takto:

var root = new RootElement ("Meals", new RadioGroup ("myGroup", 0));

Název skupiny RadioGroup se používá k zobrazení vybrané hodnoty na stránce obsahující (pokud existuje) a hodnota, která je v tomto případě nula, je index první vybrané položky.

Odznáček – element

Badge Element

Float Element

Float Element

Activity Element

Activity Element

Date Element

Date Element

Když je vybrána buňka odpovídající dateElement, zobrazí se výběr data, jak je znázorněno níže:

When the cell corresponding to the DateElement is selected, a date picker is presented as shown

Time Element

Time Element

Když je vybrána buňka odpovídající timeElement, zobrazí se výběr času, jak je znázorněno níže:

When the cell corresponding to the TimeElement is selected, a time picker is presented as shown

DateTime Element

DateTime Element

Když je vybrána buňka odpovídající dateTimeElement, zobrazí se výběr data a času, jak je znázorněno níže:

When the cell corresponding to the DateTimeElement is selected, a datetime picker is presented as shown

HTML Element

HTML Element

Zobrazí HTMLElement hodnotu jeho Caption vlastnosti v buňce tabulky. Whe selected, the Url assigned to the element is loaded in a UIWebView control as shown below:

Whe selected, the Url assigned to the element is loaded in a UIWebView control as shown below

Message Element

Message Element

Load More Element

Tento prvek slouží k tomu, aby uživatelé mohli načíst další položky v seznamu. Můžete přizpůsobit normální a načítání popis a také barvu písma a textu. Indikátor UIActivity začne animovat a načítání popis se zobrazí, když uživatel klepne na buňku a pak se NSAction předá do konstruktoru. Po dokončení UIActivity kódu NSAction se indikátor zastaví animování a znovu se zobrazí normální popis.

UIView Element

Kromě toho lze pomocí UIView nástroje UIViewElement.

Element nakreslený vlastníkem

Tento prvek musí být podtříděn jako abstraktní třída. Měli byste přepsat metodu Height(RectangleF bounds) , ve které byste měli vrátit výšku prvku, stejně jako Draw(RectangleF bounds, CGContext context, UIView view) v tom, ve kterém byste měli provést všechny přizpůsobené výkresy v rámci daných hranic pomocí kontextu a zobrazit parametry. Tento prvek provádí těžké přetěžování podtřídy UIViewa umístí ho do buňky, která se má vrátit, takže stačí implementovat pouze dvě jednoduchá přepsání. V ukázkové aplikaci v DemoOwnerDrawnElement.cs souboru můžete vidět lepší ukázkovou implementaci.

Tady je velmi jednoduchý příklad implementace třídy:

public class SampleOwnerDrawnElement : OwnerDrawnElement
{
    public SampleOwnerDrawnElement (string text) : base(UITableViewCellStyle.Default, "sampleOwnerDrawnElement")
    {
        this.Text = text;
    }

    public string Text { get; set; }

    public override void Draw (RectangleF bounds, CGContext context, UIView view)
    {
        UIColor.White.SetFill();
        context.FillRect(bounds);

        UIColor.Black.SetColor();   
        view.DrawString(this.Text, new RectangleF(10, 15, bounds.Width - 20, bounds.Height - 30), UIFont.BoldSystemFontOfSize(14.0f), UILineBreakMode.TailTruncation);
    }

    public override float Height (RectangleF bounds)
    {
        return 44.0f;
    }
}

JSON Element

Jedná se JsonElement o podtřídu RootElement , která rozšiřuje RootElement schopnost načíst obsah vnořeného podřízeného objektu z místní nebo vzdálené adresy URL.

Jedná se JsonElement o instanci RootElement , kterou lze vytvořit ve dvou formách. Jedna verze vytvoří RootElement obsah na vyžádání. Ty se vytvářejí pomocí JsonElement konstruktorů, které na konci přebírají další argument, adresu URL pro načtení obsahu z:

var je = new JsonElement ("Dynamic Data", "https://tirania.org/tmp/demo.json");

Druhý formulář vytvoří data z místního souboru nebo z existujícího System.Json.JsonObject souboru, který jste už parsovali:

var je = JsonElement.FromFile ("json.sample");
using (var reader = File.OpenRead ("json.sample"))
    return JsonElement.FromJson (JsonObject.Load (reader) as JsonObject, arg);

Další informace o použití JSON s MT. D, prohlédnu si kurz s návodem k elementu JSON.

Další funkce

Podpora obnovení k aktualizaci

Pull-to-Refresh je vizuální efekt původně nalezený v aplikaci Tweetie2, který se stal oblíbeným efektem mezi mnoha aplikacemi.

Pokud chcete do dialogových oken přidat automatickou podporu aktualizace pro vyžádání změn, stačí udělat dvě věci: připojit obslužnou rutinu události, která se má upozornit, když uživatel načte data a oznámí DialogViewController , kdy se data načetla, aby se vrátila do výchozího stavu.

Připojení oznámení je jednoduché; stačí se připojit k RefreshRequested události na následujícím DialogViewController:

dvc.RefreshRequested += OnUserRequestedRefresh;

Pak byste ve své metodě OnUserRequestedRefreshzařadí do fronty načítání dat, požadovali některá data z sítě nebo zařadíte vlákno pro výpočet dat. Po načtení dat musíte upozornit DialogViewController , že se nová data nachází a chcete-li zobrazení obnovit do výchozího stavu, provedete to voláním ReloadComplete:

dvc.ReloadComplete ();

Podpora vyhledávání

Pokud chcete podporovat vyhledávání, nastavte EnableSearch vlastnost na svém DialogViewController. Vlastnost můžete také nastavit SearchPlaceholder jako text vodoznaku na panelu hledání.

Hledání změní obsah zobrazení jako typy uživatelů. Vyhledá viditelná pole a zobrazí je uživateli. Zveřejňuje DialogViewController tři metody pro programové zahájení, ukončení nebo aktivaci nové operace filtru u výsledků. Tyto metody jsou uvedeny níže:

  • StartSearch
  • FinishSearch
  • PerformFilter

Systém je rozšiřitelný, takže pokud chcete, můžete toto chování změnit.

Načítání obrázku na pozadí

MonoTouch.Dialog obsahuje zavaděč obrázků aplikace TweetStation . Tento zavaděč obrázků lze použít k načtení obrázků na pozadí, podporuje ukládání do mezipaměti a může upozornit váš kód při načtení obrázku.

Omezí se také počet odchozích síťových připojení.

Zavaděč ImageLoader obrázku je implementovaný ve třídě, vše, co musíte udělat, je volání DefaultRequestImage metody, budete muset zadat identifikátor URI pro image, kterou chcete načíst, a také instanci IImageUpdated rozhraní, které bude vyvoláno při načtení image.

Například následující kód načte obrázek z adresy URL do BadgeElement:

string uriString = "http://some-server.com/some image url";

var rootElement = new RootElement("Image Loader") {
    new Section() {
        new BadgeElement( ImageLoader.DefaultRequestImage( new Uri(uriString), this), "Xamarin")
    }
};

Třída ImageLoader zveřejňuje metodu Purge, kterou můžete volat, když chcete uvolnit všechny image, které jsou aktuálně uloženy v mezipaměti v paměti. Aktuální kód má mezipaměť pro 50 obrázků. Pokud chcete použít jinou velikost mezipaměti (například pokud očekáváte, že obrázky budou příliš velké, aby 50 obrázků bylo příliš velké), můžete jednoduše vytvořit instance ImageLoaderu a předat počet obrázků, které chcete zachovat v mezipaměti.

Použití LINQ k vytvoření hierarchie elementů

Pomocí chytrého použití syntaxe inicializace JAZYKA LINQ a jazyka C# lze LINQ použít k vytvoření hierarchie prvků. Například následující kód vytvoří obrazovku z některých řetězcových polí a zpracuje výběr buňky prostřednictvím anonymní funkce, která je předána do každého StringElement:

var rootElement = new RootElement ("LINQ root element") {
    from x in new string [] { "one", "two", "three" }
    select new Section (x) {
        from y in "Hello:World".Split (':')
        select (Element) new StringElement (y, delegate { Debug.WriteLine("cell tapped"); })
    }
};

To se dá snadno kombinovat s úložištěm dat XML nebo daty z databáze a vytvářet složité aplikace téměř úplně z dat.

Rozšíření MT. D

Vytváření vlastních elementů

Vlastní prvek můžete vytvořit děděním z existujícího elementu nebo odvozením z kořenové třídy Element.

Pokud chcete vytvořit vlastní element, budete chtít přepsat následující metody:

// To release any heavy resources that you might have
void Dispose (bool disposing);

// To retrieve the UITableViewCell for your element
// you would need to prepare the cell to be reused, in the
// same way that UITableView expects reusable cells to work
UITableViewCell GetCell (UITableView tv);

// To retrieve a "summary" that can be used with
// a root element to render a summary one level up.  
string Summary ();

// To detect when the user has tapped on the cell
void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath path);

// If you support search, to probe if the cell matches the user input
bool Matches (string text);

Pokud váš prvek může mít proměnnou velikost, musíte implementovat rozhraní, které obsahuje jednu metodu IElementSizing :

// Returns the height for the cell at indexPath.Section, indexPath.Row
float GetHeight (UITableView tableView, NSIndexPath indexPath);

Pokud plánujete implementaci GetCell metody voláním base.GetCell(tv) a přizpůsobením vrácené buňky, musíte také přepsat CellKey vlastnost pro vrácení klíče, který bude jedinečný pro váš element, například takto:

static NSString MyKey = new NSString ("MyKey");
protected override NSString CellKey {
    get {
        return MyKey;
    }
}

To funguje pro většinu prvků, ale ne pro StringElement ty, StyledStringElement které používají vlastní sadu klíčů pro různé scénáře vykreslování. V těchto třídách byste museli replikovat kód.

DialogViewControllers (DVCs)

Reflexe ion i rozhraní Elements API používají stejné DialogViewControllerrozhraní API . Někdy budete chtít přizpůsobit vzhled zobrazení nebo můžete chtít použít některé funkce UITableViewController , které překračují rámec základního vytváření uživatelských rozhraní.

Jedná DialogViewController se pouze o podtřídu UITableViewController a můžete ji přizpůsobit stejným způsobem, jakým byste přizpůsobili UITableViewController.

Pokud například chcete změnit styl seznamu na hodnotu buď Grouped nebo Plain, můžete tuto hodnotu nastavit tak, že při vytváření kontroleru změníte vlastnost, například takto:

var myController = new DialogViewController (root, true) {
    Style = UITableViewStyle.Grouped;
}

Pro pokročilejší přizpůsobení DialogViewController, například nastavení jeho pozadí, byste podtřídy a přepsat správné metody, jak je znázorněno v následujícím příkladu:

class SpiffyDialogViewController : DialogViewController {
    UIImage image;

    public SpiffyDialogViewController (RootElement root, bool pushing, UIImage image) 
        : base (root, pushing) 
    {
        this.image = image;
    }

    public override LoadView ()
    {
        base.LoadView ();
        var color = UIColor.FromPatternImage(image);
        TableView.BackgroundColor = UIColor.Clear;
        ParentViewController.View.BackgroundColor = color;
    }
}

Další bod přizpůsobení je následující virtuální metody v:DialogViewController

public override Source CreateSizingSource (bool unevenRows)

Tato metoda by měla vrátit podtřídu DialogViewController.Source pro případy, kdy mají buňky rovnoměrnou velikost, nebo podtřídu DialogViewController.SizingSource , pokud jsou buňky nerovnoměrné.

Toto přepsání můžete použít k zachycení některé z UITableViewSource metod. TweetStation například používá ke sledování, kdy se uživatel posune na začátek a odpovídajícím způsobem aktualizuje počet nepřečtených tweetů.

Ověřování

Prvky samy o sobě neposkytují ověřování jako modely, které jsou vhodné pro webové stránky a desktopové aplikace, nemapují přímo na model interakce i Telefon.

Pokud chcete provést ověření dat, měli byste to udělat, když uživatel aktivuje akci se zadanými daty. Například tlačítko Hotovo nebo Další na horním panelu nástrojů nebo některé StringElement použité jako tlačítko pro přechod do další fáze.

Tady byste provedli základní ověření vstupu a možná složitější ověřování, jako je kontrola platnosti kombinace uživatele nebo hesla se serverem.

Způsob, jakým uživatele upozorníte na chybu, je specifická pro aplikaci. Můžete zobrazit nápovědu UIAlertView nebo zobrazit nápovědu.

Shrnutí

Tento článek se zabývá mnoha informacemi o MonoTouch.Dialog. Probírala základy toho, jak MT. D funguje a pokrýval různé součásti, které tvoří MT.D. Ukázala také širokou škálu prvků a přizpůsobení tabulek podporovaných mt. D a probrali jsme, jak MT. D lze rozšířit o vlastní prvky. Kromě toho jsme vysvětlili podporu JSON v MT. D, který umožňuje dynamicky vytvářet elementy z FORMÁTU JSON.