Pengantar MonoTouch.Dialog untuk Xamarin.iOS

MonoTouch.Dialog, disebut sebagai MT. Singkatnya, D adalah toolkit pengembangan UI cepat yang memungkinkan pengembang untuk membangun layar aplikasi dan navigasi menggunakan informasi, bukan tedium membuat pengontrol tampilan, tabel, dll. Dengan demikian, ini memberikan penyederhanaan yang signifikan dari pengembangan UI dan pengurangan kode. Misalnya, pertimbangkan cuplikan layar berikut:

For example, consider this screenshot

Kode berikut digunakan untuk menentukan seluruh layar ini:

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

Saat bekerja dengan tabel di iOS, sering kali ada banyak kode berulang. Misalnya, setiap kali tabel diperlukan, sumber data diperlukan untuk mengisi tabel tersebut. Dalam aplikasi yang memiliki dua layar berbasis tabel yang terhubung melalui pengontrol navigasi, setiap layar berbagi banyak kode yang sama.

GUNUNG. D menyederhanakannya dengan merangkum semua kode tersebut ke dalam API generik untuk pembuatan tabel. Kemudian memberikan abstraksi di atas API yang memungkinkan sintaks pengikatan objek deklaratif yang membuatnya lebih mudah. Dengan demikian, ada dua API yang tersedia di MT. D:

  • API Elemen tingkat rendah – ELEMEN API didasarkan pada pembuatan pohon hierarkis elemen yang mewakili layar dan komponennya. API Elements memberi pengembang fleksibilitas dan kontrol terbanyak dalam membuat UI. Selain itu, Elements API memiliki dukungan lanjutan untuk definisi deklaratif melalui JSON, yang memungkinkan deklarasi yang sangat cepat, serta generasi UI dinamis dari server.
  • API Refleksi Tingkat Tinggi – Juga dikenal sebagai API Pengikatan, di mana kelas dianotasikan dengan petunjuk UI dan kemudian MT. D secara otomatis membuat layar berdasarkan objek dan menyediakan pengikatan antara apa yang ditampilkan (dan diedit secara opsional) di layar, dan penolakan objek yang mendasar. Contoh di atas mengilustrasikan penggunaan API Refleksi. API ini tidak memberikan kontrol terperinci yang dilakukan API elemen, tetapi mengurangi kompleksitas lebih jauh dengan secara otomatis membangun hierarki elemen berdasarkan atribut kelas.

GUNUNG. D dilengkapi dengan sekumpulan besar elemen UI bawaan untuk pembuatan layar, tetapi juga mengenali kebutuhan akan elemen yang disesuaikan dan tata letak layar tingkat lanjut. Dengan demikian, ekstensibilitas adalah fitur kelas satu yang dipanggang ke dalam API. Pengembang dapat memperluas elemen yang ada atau membuat elemen baru lalu berintegrasi dengan mulus.

Selain itu, MT. D memiliki sejumlah fitur iOS UX umum bawaan seperti dukungan "pull-to-refresh", pemuatan gambar asinkron, dan dukungan pencarian.

Artikel ini akan melihat cara kerja yang komprehensif dengan MT. D, termasuk:

  • GUNUNG. Komponen D – Ini akan berfokus pada pemahaman kelas yang membentuk MT. D untuk memungkinkan mendapatkan kecepatan dengan cepat.
  • Referensi Elemen – Daftar komprehensif elemen bawaan MT.D.
  • Penggunaan Tingkat Lanjut - Ini mencakup fitur-fitur canggih seperti pull-to-refresh, pencarian, pemuatan gambar latar belakang, menggunakan LINQ untuk membangun hierarki elemen, dan membuat elemen kustom, sel, dan pengontrol untuk digunakan dengan MT.D.

Menyiapkan MT. D

GUNUNG. D didistribusikan dengan Xamarin.iOS. Untuk menggunakannya, klik kanan pada simpul Referensi proyek Xamarin.iOS di Visual Studio 2017 atau Visual Studio untuk Mac dan tambahkan referensi ke rakitan MonoTouch.Dialog-1 . Kemudian, tambahkan using MonoTouch.Dialog pernyataan dalam kode sumber Anda seperlunya.

Memahami Potongan MT. D

Bahkan saat menggunakan API Refleksi, MT. D membuat hierarki Element di bawah tenda, seolah-olah dibuat melalui Elements API secara langsung. Selain itu, dukungan JSON yang disebutkan di bagian sebelumnya juga membuat Elements. Untuk alasan ini, penting untuk memiliki pemahaman dasar tentang potongan-potongan konstituen MT.D.

GUNUNG. D membangun layar menggunakan empat bagian berikut:

  • DialogViewController
  • RootElement
  • Bagian
  • Elemen

DialogViewController

DialogViewController, atau DVC untuk singkatnya, mewarisi dari UITableViewController dan oleh karena itu mewakili layar dengan tabel. DVC dapat didorong ke pengontrol navigasi seperti UITableViewController biasa.

RootElement

RootElement adalah kontainer tingkat atas untuk item yang masuk ke DVC. Ini berisi Bagian, yang kemudian dapat berisi Elemen. RootElements tidak dirender; sebaliknya mereka hanya kontainer untuk apa yang sebenarnya dirender. RootElement ditetapkan ke DVC, lalu DVC merender turunannya.

Bagian

Bagian adalah sekelompok sel dalam tabel. Seperti halnya bagian tabel normal, secara opsional dapat memiliki header dan footer yang dapat berupa teks, atau bahkan tampilan kustom, seperti pada cuplikan layar berikut:

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

Elemen

Elemen mewakili sel aktual dalam tabel. GUNUNG. D dilengkapi dengan berbagai Elemen yang mewakili jenis data yang berbeda atau input yang berbeda. Misalnya, cuplikan layar berikut mengilustrasikan beberapa elemen yang tersedia:

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

Selengkapnya tentang Bagian dan RootElements

Sekarang mari kita bahas RootElements dan Bagian secara lebih rinci.

RootElements

Setidaknya satu RootElement diperlukan untuk memulai proses MonoTouch.Dialog.

Jika RootElement diinisialisasi dengan nilai bagian/elemen, nilai ini digunakan untuk menemukan Elemen turunan yang akan memberikan ringkasan konfigurasi, yang dirender di sisi kanan tampilan. Misalnya, cuplikan layar di bawah ini memperlihatkan tabel di sebelah kiri dengan sel yang berisi judul layar detail di sebelah kanan, "Dessert", bersama dengan nilai gurun yang dipilih.

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

Elemen root juga dapat digunakan di dalam Bagian untuk memicu pemuatan halaman konfigurasi berlapis baru, seperti yang ditunjukkan di atas. Ketika digunakan dalam mode ini, keterangan yang disediakan digunakan saat dirender di dalam bagian dan juga digunakan sebagai Judul untuk sub halaman. Contohnya:

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

Dalam contoh di atas, ketika pengguna mengetuk "Dessert", MonoTouch.Dialog akan membuat halaman baru dan menavigasinya dengan akar menjadi "Dessert" dan memiliki grup radio dengan tiga nilai.

Dalam sampel khusus ini, grup radio akan memilih "Kue Cokelat" di bagian "Dessert" karena kami meneruskan nilai "2" ke RadioGroup. Ini berarti memilih item ke-3 pada daftar (nol-indeks).

Memanggil bagian Tambahkan metode atau menggunakan sintaksis inisialisasi C# 4 menambahkan. Metode Sisipkan disediakan untuk menyisipkan bagian dengan animasi.

Jika Anda membuat RootElement dengan instans Grup (bukan RadioGroup) nilai ringkasan RootElement saat ditampilkan di Bagian akan menjadi jumlah kumulatif dari semua BooleanElements dan CheckboxElements yang memiliki kunci yang sama dengan nilai Group.Key.

Bagian

Bagian digunakan untuk mengelompokkan elemen di layar dan merupakan satu-satunya turunan langsung yang valid dari RootElement. Bagian dapat berisi salah satu elemen standar, termasuk RootElements baru.

RootElements yang disematkan di bagian digunakan untuk menavigasi ke tingkat yang lebih dalam baru.

Bagian dapat memiliki header dan footer baik sebagai string, atau sebagai UIViews. Biasanya Anda hanya akan menggunakan string, tetapi untuk membuat UI kustom, Anda dapat menggunakan UIView apa pun sebagai header atau footer. Anda dapat menggunakan string untuk membuatnya seperti ini:

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

Untuk menggunakan tampilan, cukup teruskan tampilan ke konstruktor:

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

Mendapatkan Pemberitahuan

Menangani NSAction

GUNUNG. D menampilkan NSAction sebagai delegasi untuk menangani panggilan balik. Misalnya, Anda ingin menangani peristiwa sentuhan untuk sel tabel yang dibuat oleh MT.D. Saat membuat elemen dengan MT. D, cukup berikan fungsi panggilan balik, seperti yang ditunjukkan di bawah ini:

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

Mengambil Nilai Elemen

Dikombinasikan dengan Element.Value properti , panggilan balik dapat mengambil nilai yang diatur dalam elemen lain. Sebagai contoh, perhatikan kode berikut:

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

Kode ini membuat UI seperti yang ditunjukkan di bawah ini. Untuk panduan lengkap dari contoh ini, lihat tutorial Panduan API Elements.

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

Saat pengguna menekan sel tabel bawah, kode dalam fungsi anonim dijalankan, menulis nilai dari element instans ke pad Output Aplikasi di Visual Studio untuk Mac.

Elemen Bawaan

GUNUNG. D dilengkapi dengan sejumlah item sel tabel bawaan yang dikenal sebagai Elemen. Elemen-elemen ini digunakan untuk menampilkan berbagai jenis dalam sel tabel seperti string, float, tanggal dan bahkan gambar, untuk memberi nama hanya beberapa. Setiap elemen mengurus menampilkan jenis data dengan tepat. Misalnya, elemen boolean akan menampilkan sakelar untuk mengalihkan nilainya. Demikian juga, elemen float akan menampilkan pengguncur untuk mengubah nilai float.

Ada elemen yang lebih kompleks untuk mendukung jenis data yang lebih kaya seperti gambar dan html. Misalnya, elemen html, yang akan membuka UIWebView untuk memuat halaman web saat dipilih, menampilkan keterangan di sel tabel.

Bekerja dengan Nilai Elemen

Elemen yang digunakan untuk menangkap input pengguna mengekspos properti publik Value yang menyimpan nilai elemen saat ini kapan saja. Ini secara otomatis diperbarui saat pengguna menggunakan aplikasi.

Ini adalah perilaku untuk semua Elemen yang merupakan bagian dari MonoTouch.Dialog, tetapi tidak diperlukan untuk elemen yang dibuat pengguna.

Elemen String

memperlihatkan StringElement keterangan di sisi kiri sel tabel dan nilai string di sisi kanan sel.

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

Untuk menggunakan sebagai StringElement tombol, berikan delegasi.

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

To use a StringElement as a button, provide a delegate

Elemen String Bertata

memungkinkan StyledStringElement string disajikan menggunakan gaya sel tabel bawaan atau dengan pemformatan kustom.

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

Kelas StyledStringElement berasal dari StringElement, tetapi memungkinkan pengembang menyesuaikan beberapa properti seperti Font, warna teks, warna sel latar belakang, mode pemisah baris, jumlah baris untuk ditampilkan, dan apakah aksesori harus ditampilkan.

Elemen Multibaris

Multiline Element

Elemen Entri

, EntryElementseperti namanya, digunakan untuk mendapatkan input pengguna. Ini mendukung string reguler atau kata sandi, di mana karakter disembunyikan.

The EntryElement is used to get user input

Ini diinisialisasi dengan tiga nilai:

  • Keterangan untuk entri yang akan ditampilkan kepada pengguna.
  • Teks tempat penampung (ini adalah teks berwarna abu-abu yang memberikan petunjuk kepada pengguna).
  • Nilai teks.

Tempat penampung dan nilai dapat null. Namun, keterangan diperlukan.

Kapan saja, mengakses properti Nilainya dapat mengambil nilai .EntryElement

KeyboardType Selain itu properti dapat diatur pada waktu pembuatan ke gaya jenis keyboard yang diinginkan untuk entri data. Ini dapat digunakan untuk mengonfigurasi keyboard menggunakan nilai UIKeyboardType seperti yang tercantum di bawah ini:

  • Numerik
  • Telepon
  • URL
  • Email

Elemen Boolean

Boolean Element

Elemen Kotak Centang

Checkbox Element

Elemen Radio

RadioElement memerlukan RadioGroup untuk ditentukan dalam RootElement.

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

A RadioElement requires a RadioGroup to be specified in the RootElement

RootElements juga digunakan untuk mengoordinasikan elemen radio. Anggota RadioElement dapat menjangkau beberapa Bagian (misalnya untuk mengimplementasikan sesuatu yang mirip dengan pemilih nada cincin dan nada dering kustom terpisah dari nada dering sistem). Tampilan ringkasan akan menampilkan elemen radio yang saat ini dipilih. Untuk menggunakan ini, buat RootElement dengan konstruktor grup, seperti ini:

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

Nama grup di RadioGroup digunakan untuk memperlihatkan nilai yang dipilih di halaman yang berisi (jika ada) dan nilai, yang nol dalam hal ini, adalah indeks item pertama yang dipilih.

Elemen Lencana

Badge Element

Elemen Float

Float Element

Elemen Aktivitas

Activity Element

Elemen Tanggal

Date Element

Saat sel yang sesuai dengan DateElement dipilih, pemilih tanggal disajikan seperti yang ditunjukkan di bawah ini:

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

Elemen Waktu

Time Element

Saat sel yang sesuai dengan TimeElement dipilih, pemilih waktu disajikan seperti yang ditunjukkan di bawah ini:

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

Elemen DateTime

DateTime Element

Saat sel yang sesuai dengan DateTimeElement dipilih, pemilih tanggalwaktu disajikan seperti yang ditunjukkan di bawah ini:

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

Elemen HTML

HTML Element

HTMLElement menampilkan nilai propertinya Caption dalam sel tabel. Whe dipilih, yang Url ditetapkan ke elemen dimuat dalam kontrol seperti yang UIWebView ditunjukkan di bawah ini:

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

Elemen Pesan

Message Element

Muat Elemen Lainnya

Gunakan elemen ini untuk memungkinkan pengguna memuat lebih banyak item dalam daftar Anda. Anda dapat menyesuaikan keterangan normal dan pemuatan, serta font dan warna teks. Indikator UIActivity mulai beranimasi, dan keterangan pemuatan ditampilkan saat pengguna mengetuk sel, lalu NSAction yang diteruskan ke konstruktor dijalankan. Setelah kode Anda selesai NSAction , UIActivity indikator berhenti beranimasi dan keterangan normal ditampilkan lagi.

Elemen UIView

Selain itu, kustom UIView apa pun dapat ditampilkan menggunakan UIViewElement.

Elemen Yang Digambar Pemilik

Elemen ini harus disubkelas karena merupakan kelas abstrak. Anda harus mengambil Height(RectangleF bounds) alih metode di mana Anda harus mengembalikan tinggi elemen, serta Draw(RectangleF bounds, CGContext context, UIView view) di mana Anda harus melakukan semua gambar yang disesuaikan dalam batas yang diberikan, menggunakan parameter konteks dan tampilan. Elemen ini melakukan pengangkatan berat subkelas UIView, dan menempatkannya di sel untuk dikembalikan, sehingga Anda hanya perlu menerapkan dua penimpaan sederhana. Anda dapat melihat implementasi sampel yang lebih baik di aplikasi sampel dalam DemoOwnerDrawnElement.cs file.

Berikut adalah contoh yang sangat sederhana untuk mengimplementasikan kelas:

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

Elemen JSON

JsonElement adalah subkelas RootElement yang memperluas RootElement untuk dapat memuat konten anak berlapis dari url lokal atau jarak jauh.

JsonElement adalah RootElement yang dapat diinstansiasi dalam dua bentuk. Satu versi membuat RootElement yang akan memuat konten sesuai permintaan. Ini dibuat dengan menggunakan JsonElement konstruktor yang mengambil argumen tambahan di akhir, url untuk memuat konten dari:

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

Formulir lain membuat data dari file lokal atau System.Json.JsonObject yang sudah Ada yang telah Anda uraikan:

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

Untuk informasi selengkapnya tentang menggunakan JSON dengan MT. D, lihat tutorial JSON Element Walkthrough .

Fitur Lainnya

Dukungan Pull-to-Refresh

Pull-to-Refresh adalah efek visual yang awalnya ditemukan di aplikasi Tweetie2, yang menjadi efek populer di antara banyak aplikasi.

Untuk menambahkan dukungan pull-to-refresh otomatis ke dialog Anda, Anda hanya perlu melakukan dua hal: menghubungkan penanganan aktivitas untuk diberi tahu ketika pengguna menarik data dan memberi tahu DialogViewController kapan data telah dimuat untuk kembali ke status defaultnya.

Menghubungkan pemberitahuan itu sederhana; cukup sambungkan ke RefreshRequested acara di DialogViewController, seperti ini:

dvc.RefreshRequested += OnUserRequestedRefresh;

Kemudian pada metode OnUserRequestedRefreshAnda , Anda akan mengantre beberapa pemuatan data, meminta beberapa data dari internet, atau memutar utas untuk menghitung data. Setelah data dimuat, Anda harus memberi tahu DialogViewController bahwa data baru berada, dan untuk memulihkan tampilan ke status defaultnya, Anda melakukan ini dengan memanggil ReloadComplete:

dvc.ReloadComplete ();

Dukungan Pencarian

Untuk mendukung pencarian, atur EnableSearch properti di .DialogViewController Anda juga dapat mengatur properti untuk SearchPlaceholder digunakan sebagai teks marka air di bilah pencarian.

Pencarian akan mengubah konten tampilan sebagai jenis pengguna. Ini mencari bidang yang terlihat dan menunjukkan bidang tersebut kepada pengguna. Mengekspos DialogViewController tiga metode untuk memulai, mengakhiri, atau memicu operasi filter baru secara terprogram pada hasilnya. Metode ini tercantum di bawah ini:

  • StartSearch
  • FinishSearch
  • PerformFilter

Sistem ini dapat diperluas, sehingga Anda dapat mengubah perilaku ini jika Anda mau.

Pemuatan Gambar Latar Belakang

MonoTouch.Dialog menggabungkan pemuat gambar aplikasi TweetStation . Pemuat gambar ini dapat digunakan untuk memuat gambar di latar belakang, mendukung penembolokan dan dapat memberi tahu kode Anda ketika gambar telah dimuat.

Ini juga akan membatasi jumlah koneksi jaringan keluar.

Pemuat gambar diimplementasikan di ImageLoader kelas , yang perlu Anda lakukan adalah memanggil DefaultRequestImage metode , Anda harus menyediakan Uri untuk gambar yang ingin Anda muat, serta instans IImageUpdated antarmuka yang akan dipanggil ketika gambar telah dimuat.

Misalnya kode berikut memuat gambar dari Url ke dalam 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")
    }
};

Kelas ImageLoader mengekspos metode Pembersihan yang dapat Anda panggil ketika Anda ingin merilis semua gambar yang saat ini di-cache dalam memori. Kode saat ini memiliki cache untuk 50 gambar. Jika Anda ingin menggunakan ukuran cache yang berbeda (misalnya, jika Anda mengharapkan gambar terlalu besar sehingga 50 gambar akan terlalu banyak), Anda hanya dapat membuat instans ImageLoader dan meneruskan jumlah gambar yang ingin Anda simpan di cache.

Menggunakan LINQ untuk Membuat Hierarki Elemen

Melalui penggunaan cerdas sintaksis inisialisasi LINQ dan C#, LINQ dapat digunakan untuk membuat hierarki elemen. Misalnya, kode berikut membuat layar dari beberapa array string dan menangani pemilihan sel melalui fungsi anonim yang diteruskan ke masing-masing 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"); })
    }
};

Ini dapat dengan mudah dikombinasikan dengan penyimpanan data XML atau data dari database untuk membuat aplikasi kompleks hampir sepenuhnya dari data.

Memperluas MT. D

Membuat Elemen Kustom

Anda dapat membuat elemen Anda sendiri dengan mewarisi dari Elemen yang ada atau dengan berasal dari Elemen kelas akar.

Untuk membuat Elemen Anda sendiri, Anda ingin mengambil alih metode berikut:

// 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);

Jika elemen Anda dapat memiliki ukuran variabel, Anda perlu mengimplementasikan IElementSizing antarmuka, yang berisi satu metode:

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

Jika Anda berencana untuk menerapkan metode Anda GetCell dengan memanggil base.GetCell(tv) dan menyesuaikan sel yang dikembalikan, Anda juga perlu mengambil alih CellKey properti untuk mengembalikan kunci yang akan unik untuk Elemen Anda, seperti ini:

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

Ini berfungsi untuk sebagian besar elemen, tetapi tidak untuk StringElement dan StyledStringElement karena mereka menggunakan sekumpulan kunci mereka sendiri untuk berbagai skenario penyajian. Anda harus mereplikasi kode di kelas-kelas tersebut.

DialogViewControllers (DVC)

Api Refleksi dan Elemen menggunakan yang sama DialogViewController. Terkadang Anda ingin menyesuaikan tampilan atau Anda mungkin ingin menggunakan beberapa fitur UITableViewController yang melampaui pembuatan dasar UI.

DialogViewController ini hanyalah subkelas dari UITableViewController dan Anda dapat menyesuaikannya dengan cara yang sama seperti Anda akan menyesuaikan UITableViewController.

Misalnya, jika Anda ingin mengubah gaya daftar menjadi atau GroupedPlain, Anda dapat mengatur nilai ini dengan mengubah properti saat membuat pengontrol, seperti ini:

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

Untuk penyesuaian yang lebih canggih dari DialogViewController, seperti mengatur latar belakangnya, Anda akan mengesampingkannya dan mengambil alih metode yang tepat, seperti yang ditunjukkan pada contoh di bawah ini:

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

Titik kustomisasi lain adalah metode virtual berikut dalam DialogViewController:

public override Source CreateSizingSource (bool unevenRows)

Metode ini harus mengembalikan subkelas DialogViewController.Source untuk kasus di mana sel Anda berukuran DialogViewController.SizingSource merata, atau subkelas jika sel Anda tidak merata.

Anda dapat menggunakan penimpaan ini untuk mengambil salah UITableViewSource satu metode. Misalnya, TweetStation menggunakan ini untuk melacak kapan pengguna telah menggulir ke bagian atas dan memperbarui jumlah tweet yang belum dibaca.

Validasi

Elemen tidak memberikan validasi sendiri karena model yang sangat cocok untuk halaman web dan aplikasi desktop tidak memetakan langsung ke model interaksi i Telepon.

Jika Anda ingin melakukan validasi data, Anda harus melakukan ini saat pengguna memicu tindakan dengan data yang dimasukkan. Misalnya tombol Selesai atau Berikutnya di toolbar atas, atau beberapa StringElement digunakan sebagai tombol untuk masuk ke tahap berikutnya.

Di sinilah Anda akan melakukan validasi input dasar, dan mungkin validasi yang lebih rumit seperti memeriksa validitas kombinasi pengguna/kata sandi dengan server.

Cara Anda memberi tahu pengguna tentang kesalahan adalah spesifik aplikasi. Anda dapat memunculkan UIAlertView atau menunjukkan petunjuk.

Ringkasan

Artikel ini membahas banyak informasi tentang MonoTouch.Dialog. Ini membahas dasar-dasar bagaimana MT. D bekerja dan mencakup berbagai komponen yang terdiri dari MT.D. Ini juga menunjukkan berbagai elemen dan penyesuaian tabel yang didukung oleh MT. D dan membahas bagaimana MT. D dapat diperluas dengan elemen kustom. Selain itu dijelaskan dukungan JSON di MT. D yang memungkinkan pembuatan elemen secara dinamis dari JSON.