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:
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:
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:
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.
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.
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.
Untuk menggunakan sebagai StringElement
tombol, berikan delegasi.
new StringElement ("Click me", () => {
new UIAlertView("Tapped", "String Element Tapped", null, "ok", null).Show();
});
Elemen String Bertata
memungkinkan StyledStringElement
string disajikan menggunakan gaya sel tabel bawaan atau dengan pemformatan kustom.
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
Elemen Entri
, EntryElement
seperti namanya, digunakan untuk mendapatkan input pengguna. Ini mendukung string reguler atau kata sandi, di mana karakter disembunyikan.
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
Elemen Boolean
Elemen Kotak Centang
Elemen Radio
RadioElement
memerlukan RadioGroup
untuk ditentukan dalam RootElement
.
mtRoot = new RootElement ("Demos", new RadioGroup("MyGroup", 0));
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
Elemen Float
Elemen Aktivitas
Elemen Tanggal
Saat sel yang sesuai dengan DateElement dipilih, pemilih tanggal disajikan seperti yang ditunjukkan di bawah ini:
Elemen Waktu
Saat sel yang sesuai dengan TimeElement dipilih, pemilih waktu disajikan seperti yang ditunjukkan di bawah ini:
Elemen DateTime
Saat sel yang sesuai dengan DateTimeElement dipilih, pemilih tanggalwaktu disajikan seperti yang ditunjukkan di bawah ini:
Elemen HTML
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:
Elemen Pesan
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 OnUserRequestedRefresh
Anda , 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 Grouped
Plain
, 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.
Link Terkait
- Panduan: Membuat aplikasi menggunakan Api Elements
- Panduan: Membuat aplikasi menggunakan API Refleksi
- Panduan: Menggunakan Elemen JSON untuk membuat Antarmuka Pengguna
- MonoTouch.Dialog JSON Markup
- Dialog MonoTouch di Github
- Referensi Kelas UITableViewController
- Referensi Kelas UINavigationController