Xamarin.iOS için MonoTouch.Dialog'a Giriş
MonoTouch.Dialog, MT olarak adlandırılır. Kısaca D, geliştiricilerin görünüm denetleyicileri, tablolar vb. oluşturmanın bir parçası yerine bilgileri kullanarak uygulama ekranları ve gezinti oluşturmasına olanak tanıyan hızlı bir kullanıcı arabirimi geliştirme araç setidir. Bu nedenle, kullanıcı arabirimi geliştirme ve kod azaltma önemli bir basitleştirme sağlar. Örneğin, aşağıdaki ekran görüntüsünü göz önünde bulundurun:
Bu ekranın tamamını tanımlamak için aşağıdaki kod kullanılmıştır:
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;
}
iOS'ta tablolarla çalışırken genellikle bir ton tekrarlı kod vardır. Örneğin, her tablo gerektiğinde, bu tabloyu doldurmak için bir veri kaynağı gerekir. Bir gezinti denetleyicisi aracılığıyla bağlanan iki tablo tabanlı ekrana sahip bir uygulamada, her ekran aynı kodun çoğunu paylaşır.
MT. D, bu kodun tümünü tablo oluşturmak üzere genel bir API'de kapsülleyerek bunu basitleştirir. Daha sonra bu API'nin üzerinde, daha da kolaylaştıran bildirim temelli bir nesne bağlama söz dizimine olanak tanıyan bir soyutlama sağlar. Bu nedenle MT'de iki API vardır. D:
- Alt düzey Öğeler API'si – Öğeler API'si, ekranları ve bileşenlerini temsil eden bir hiyerarşik öğe ağacı oluşturmayı temel alır. Öğeler API'si geliştiricilere YAPAY zeka oluşturma konusunda en fazla esnekliği ve denetimi sağlar. Ayrıca, Elements API'si JSON aracılığıyla bildirim temelli tanım için gelişmiş desteğe sahiptir ve bu sayede hem inanılmaz hızlı bildirim hem de bir sunucudan dinamik kullanıcı arabirimi oluşturma olanağı sağlanır.
- Üst Düzey Yansıma API'si – BağlamaAPI'si olarak da bilinir. Sınıflara kullanıcı arabirimi ipuçları ve ardından MT ile ek açıklama eklenir. D, nesneleri temel alan ekranları otomatik olarak oluşturur ve ekranda görüntülenen (ve isteğe bağlı olarak düzenlenen) ile temel alınan nesne yedeklemesi arasında bir bağlama sağlar. Yukarıdaki örnekte Yansıma API'sinin kullanımı gösterilmiştir. Bu API, öğe API'sinin yaptığı ayrıntılı denetimi sağlamaz, ancak sınıf özniteliklerine göre öğe hiyerarşisini otomatik olarak oluşturarak karmaşıklığı daha da azaltır.
MT. D, ekran oluşturma için büyük bir yerleşik kullanıcı arabirimi öğeleri kümesiyle birlikte gelir, ancak özelleştirilmiş öğeler ve gelişmiş ekran düzenleri gereksinimini de tanır. Bu nedenle genişletilebilirlik, API'de pişirilen birinci sınıf bir özelliktir. Geliştiriciler mevcut öğeleri genişletebilir veya yeni öğeler oluşturabilir ve ardından sorunsuz bir şekilde tümleştirebilir.
Ayrıca MT. D'de "yenilemeye çekme" desteği, zaman uyumsuz görüntü yükleme ve arama desteği gibi yerleşik bir dizi yaygın iOS UX özelliği vardır.
Bu makale MT ile çalışmaya kapsamlı bir bakış sağlayacaktır. D, dahil:
- MT. D Bileşenleri – Bu, MT'yi oluşturan sınıfları anlamaya odaklanır. Hızlı bir şekilde hız elde etmek için D.
- Elements Reference : MT.D'nin yerleşik öğelerinin kapsamlı bir listesi.
- Gelişmiş Kullanım – Bu, yenileme, arama, arka plan görüntüsü yükleme, LINQ kullanarak öğe hiyerarşileri oluşturma ve MT.D ile kullanılmak üzere özel öğeler, hücreler ve denetleyiciler oluşturma gibi gelişmiş özellikleri kapsar.
MT'nin ayarlanması. D
MT. D, Xamarin.iOS ile dağıtılır. Bunu kullanmak için Visual Studio 2017 veya Mac için Visual Studio bir Xamarin.iOS projesinin Başvurular düğümüne sağ tıklayın ve MonoTouch.Dialog-1 derlemesine başvuru ekleyin. Ardından, kaynak kodunuza gerektiği gibi deyimler ekleyin using MonoTouch.Dialog
.
MT'nin Parçalarını Anlama. D
Yansıma API'sini kullanırken bile MT. D, doğrudan Öğeler API'si aracılığıyla oluşturulmuş gibi arka planda bir Öğe hiyerarşisi oluşturur. Ayrıca, önceki bölümde bahsedilen JSON desteği de Öğeler oluşturur. Bu nedenle, MT.D'nin kurucu parçaları hakkında temel bilgilere sahip olmak önemlidir.
MT. D, aşağıdaki dört bölümü kullanarak ekranlar oluşturur:
- DialogViewController
- RootElement
- Bölüm
- Öğe
DialogViewController
DialogViewController veya kısaca DVC, öğesinden UITableViewController
devralır ve bu nedenle tablo içeren bir ekranı temsil eder. DVC'ler, normal UITableViewController gibi bir gezinti denetleyicisine gönderilebilir.
RootElement
RootElement, DVC'ye giden öğeler için en üst düzey kapsayıcıdır. Daha sonra Öğeleri içerebilen Bölümler içerir. RootElement'ler işlenmez; bunun yerine yalnızca gerçekte işlenenler için kapsayıcılardır. RootElement bir DVC'ye atanır ve ardından DVC alt öğelerini işler.
Section
Bölüm, tablodaki bir hücre grubudur. Normal bir tablo bölümünde olduğu gibi, isteğe bağlı olarak, aşağıdaki ekran görüntüsünde olduğu gibi metin, hatta özel görünümler olabilecek bir üst bilgi ve alt bilgiye sahip olabilir:
Öğe
Öğe, tablodaki gerçek bir hücreyi temsil eder. MT. D, farklı veri türlerini veya farklı girişleri temsil eden çok çeşitli Öğelerle birlikte gelir. Örneğin, aşağıdaki ekran görüntüleri kullanılabilir öğelerden birkaçını gösterir:
Bölümler ve RootElements hakkında daha fazla bilgi
Şimdi RootElement'leri ve Bölümleri daha ayrıntılı olarak ele alalım.
RootElements
MonoTouch.Dialog işlemini başlatmak için en az bir RootElement gereklidir.
RootElement bir bölüm/öğe değeriyle başlatılırsa, bu değer, ekranın sağ tarafında işlenen yapılandırmanın özetini sağlayacak bir alt Öğeyi bulmak için kullanılır. Örneğin, aşağıdaki ekran görüntüsünde sol tarafta seçili çölün değeriyle birlikte sağ tarafta ayrıntı ekranının başlığını içeren bir hücre olan "Tatlı" adlı bir tablo gösterilmektedir.
Kök öğeler, yukarıda gösterildiği gibi yeni bir iç içe yapılandırma sayfasının yüklenmesini tetikmek için Bölümler'in içinde de kullanılabilir. Bu modda kullanıldığında, sağlanan resim yazısı bir bölümün içinde işlenirken kullanılır ve alt sayfanın Başlığı olarak da kullanılır. Örneğin:
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")
}
}
}
};
Yukarıdaki örnekte, kullanıcı "Tatlı" seçeneğine dokunduğunda MonoTouch.Dialog yeni bir sayfa oluşturur ve kök değeri "Tatlı" olan ve üç değer içeren bir radyo grubuna sahip olan sayfaya gider.
Bu örnekte, "2" değerini RadioGroup'a geçirdiğimiz için radyo grubu "Tatlı" bölümünde "Chocolate Cake" öğesini seçer. Bu, listedeki 3. öğeyi (sıfır dizin) seçme anlamına gelir.
Add yöntemini çağırmak veya C# 4 başlatıcı söz dizimini kullanmak bölümler ekler. Insert yöntemleri, animasyon içeren bölümler eklemek için sağlanır.
RootElement'i bir Grup örneğiyle (RadioGroup yerine) oluşturursanız, Bir Bölümde görüntülendiğinde RootElement'in özet değeri Group.Key değeriyle aynı anahtara sahip olan tüm BooleanElement'lerin ve CheckboxElement'lerin birikmeli sayısı olur.
Bölümler
Bölümler, ekrandaki öğeleri gruplandırmak için kullanılır ve RootElement'in tek geçerli doğrudan alt öğeleridir. Bölümler, yeni RootElement'ler de dahil olmak üzere standart öğelerden herhangi birini içerebilir.
Bir bölüme eklenmiş RootElement'ler, yeni bir daha derin düzeye gitmek için kullanılır.
Bölümlerin üst bilgileri ve alt bilgileri dize olarak veya UIViews olarak bulunabilir. Genellikle yalnızca dizeleri kullanırsınız, ancak özel URI'ler oluşturmak için üst bilgi veya alt bilgi olarak herhangi bir UIView kullanabilirsiniz. Bunları aşağıdaki gibi oluşturmak için bir dize kullanabilirsiniz:
var section = new Section ("Header", "Footer");
Görünümleri kullanmak için görünümleri oluşturucuya geçirmeniz gerekir:
var header = new UIImageView (Image.FromFile ("sample.png"));
var section = new Section (header);
Bildirim Alınıyor
NSAction İşleme
MT. D, geri çağırmaları işlemek için bir NSAction
temsilci olarak ortaya çıkar.
Örneğin, MT.D tarafından oluşturulan bir tablo hücresi için dokunma olayını işlemek istediğinizi varsayalım. MT ile öğe oluştururken. D, aşağıda gösterildiği gibi bir geri çağırma işlevi sağlamanız yeterlidir:
new Section () {
new StringElement ("Demo Callback", delegate { Console.WriteLine ("Handled"); })
}
Öğe Değeri Alınıyor
özelliğiyle birlikte Element.Value
, geri çağırma diğer öğelerde ayarlanan değeri alabilir. Örneğin, aşağıdaki kodu göz önünde bulundurun:
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); })
}
};
Bu kod aşağıda gösterildiği gibi bir kullanıcı arabirimi oluşturur. Bu örneğin tam kılavuzu için Bkz . Öğeler API'si İzlenecek Yol öğreticisi.
Kullanıcı alt tablo hücresine bastığında anonim işlevdeki kod yürütülür ve örnekteki değeri element
Mac için Visual Studio'deki Uygulama Çıktısı bölmesine yazar.
Yerleşik Öğeler
MT. D, Öğeler olarak bilinen bir dizi yerleşik tablo hücre öğesiyle birlikte gelir. Bu öğeler, tablo hücrelerinde dizeler, kayanlar, tarihler ve hatta görüntüler gibi çeşitli türleri görüntülemek için kullanılır ve yalnızca birkaçını adlandırır. Her öğe, veri türünü uygun şekilde görüntülemeyi üstlenir. Örneğin, boole öğesi değerini değiştirmek için bir anahtar görüntüler. Benzer şekilde, float öğesi float değerini değiştirmek için bir kaydırıcı görüntüler.
Görüntüler ve html gibi daha zengin veri türlerini desteklemek için daha da karmaşık öğeler vardır. Örneğin, seçildiğinde bir web sayfasını yüklemek için UIWebView'ı açan bir html öğesi, tablo hücresinde bir resim yazısı görüntüler.
Öğe Değerleriyle Çalışma
Kullanıcı girişini yakalamak için kullanılan öğeler, herhangi bir zamanda öğenin geçerli değerini tutan bir ortak Value
özelliği kullanıma sunar. Kullanıcı uygulamayı kullandığında otomatik olarak güncelleştirilir.
Bu, MonoTouch.Dialog'un parçası olan tüm Öğeler için davranıştır, ancak kullanıcı tarafından oluşturulan öğeler için gerekli değildir.
Dize Öğesi
Tablo StringElement
hücresinin sol tarafında bir resim yazısı ve hücrenin sağ tarafında dize değeri gösterilir.
Düğme olarak kullanmak StringElement
için bir temsilci sağlayın.
new StringElement ("Click me", () => {
new UIAlertView("Tapped", "String Element Tapped", null, "ok", null).Show();
});
StilLi Dize Öğesi
A StyledStringElement
, yerleşik tablo hücre stilleri kullanılarak veya özel biçimlendirmeyle dizelerin sunulmasını sağlar.
StyledStringElement
sınıfı öğesinden StringElement
türetilir, ancak geliştiricilerin Yazı Tipi, metin rengi, arka plan hücre rengi, satır kesme modu, görüntülenecek satır sayısı ve bir aksesuarın görüntülenip görüntülenmeyeceği gibi birkaç özelliği özelleştirmesine olanak tanır.
Çok Satırlı Öğe
Entry Öğesi
EntryElement
adından da anlaşılacağı gibi, kullanıcı girişini almak için kullanılır. Karakterlerin gizlendiği normal dizeleri veya parolaları destekler.
Üç değerle başlatılır:
- Kullanıcıya gösterilecek girişin resim yazısı.
- Yer tutucu metin (kullanıcıya ipucu sağlayan gri renkteki metindir).
- Metnin değeri.
Yer tutucu ve değer null olabilir. Ancak resim yazısı gereklidir.
Herhangi bir noktada Value özelliğine erişmek değerini EntryElement
alabilir.
Ayrıca KeyboardType
özellik oluşturma zamanında veri girişi için istenen klavye türü stiline ayarlanabilir. Bu, aşağıda listelenen değerleri UIKeyboardType
kullanarak klavyeyi yapılandırmak için kullanılabilir:
- Sayısal
- Phone
- Url
- E-posta
Boole Öğesi
Onay Kutusu Öğesi
Radyo Öğesi
ARadioElement
, içinde RootElement
belirtilmesi için bir RadioGroup
gerektirir.
mtRoot = new RootElement ("Demos", new RadioGroup("MyGroup", 0));
RootElements
radyo öğelerini koordine etmek için de kullanılır. Üyeler RadioElement
birden çok Bölüme yayılabilir (örneğin, halka tonu seçicisine benzer bir şey uygulamak ve sistem zil seslerinden özel zil sesleri ayırmak için). Özet görünümünde o anda seçili olan radyo öğesi gösterilir. Bunu kullanmak için, aşağıdaki gibi grup oluşturucuyla öğesini oluşturun RootElement
:
var root = new RootElement ("Meals", new RadioGroup ("myGroup", 0));
içindeki grubun RadioGroup
adı, içeren sayfada (varsa) seçili değeri göstermek için kullanılır ve bu örnekte sıfır olan değer, seçilen ilk öğenin dizinidir.
Rozet Öğesi
Float Öğesi
Etkinlik Öğesi
Date Öğesi
DateElement öğesine karşılık gelen hücre seçildiğinde, aşağıda gösterildiği gibi bir tarih seçici gösterilir:
Time Öğesi
TimeElement öğesine karşılık gelen hücre seçildiğinde, aşağıda gösterildiği gibi bir zaman seçici gösterilir:
DateTime Öğesi
DateTimeElement öğesine karşılık gelen hücre seçildiğinde, aşağıda gösterildiği gibi bir tarih saat seçici gösterilir:
HTML Öğesi
, HTMLElement
özelliğinin Caption
değerini tablo hücresinde görüntüler. Seçili durumdayken Url
, öğesine atanan öğe aşağıda gösterildiği gibi bir UIWebView
denetime yüklenir:
İleti Öğesi
Daha Fazla Öğe Yükle
Kullanıcıların listenizde daha fazla öğe yüklemesine izin vermek için bu öğeyi kullanın. Normal ve yükleme açıklamalı alt yazıların yanı sıra yazı tipini ve metin rengini özelleştirebilirsiniz.
Gösterge UIActivity
animasyonu başlatır ve kullanıcı hücreye dokunduğunda yükleme resim yazısı görüntülenir ve ardından NSAction
oluşturucuya geçirilen yürütülür. içindeki NSAction
kodunuz tamamlandıktan sonra gösterge UIActivity
animasyonu durdurur ve normal resim yazısı yeniden görüntülenir.
UIView Öğesi
Ayrıca, herhangi bir özel UIView
öğe kullanılarak UIViewElement
görüntülenebilir.
Sahip Tarafından Çizilmiş Öğe
Bu öğe soyut bir sınıf olduğundan alt sınıfa alınmalıdır. Öğesinin Height(RectangleF bounds)
Draw(RectangleF bounds, CGContext context, UIView view)
yüksekliğini döndürmeniz ve bağlam ve görünüm parametrelerini kullanarak tüm özelleştirilmiş çiziminizi verilen sınırlar içinde yapmanız gereken yöntemi geçersiz kılmanız gerekir. Bu öğe, alt UIView
sınıflamanın ağır bir şekilde kaldırılmasını ve döndürülecek hücreye yerleştirilmesini sağlar ve yalnızca iki basit geçersiz kılma gerçekleştirmeniz yeterli olur. Dosyadaki örnek uygulamada daha iyi bir örnek uygulama DemoOwnerDrawnElement.cs
görebilirsiniz.
Aşağıda sınıfını uygulamaya yönelik çok basit bir örnek verilmişti:
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 Öğesi
JsonElement
, iç içe alt öğesinin RootElement
içeriğini yerel veya uzak url'den RootElement
yükleyebilmek için öğesini genişleten bir alt sınıfıdır.
JsonElement
, iki biçimde örneği oluşturulabilen bir RootElement
örneğidir. Bir sürüm, içeriği isteğe bağlı olarak yükleyecek bir RootElement
oluşturur. Bunlar, sonunda ek bir bağımsız değişken alan oluşturucular kullanılarak JsonElement
oluşturulur ve içeriği yüklenecek URL:
var je = new JsonElement ("Dynamic Data", "https://tirania.org/tmp/demo.json");
Diğer form, verileri yerel bir dosyadan veya zaten ayrıştırdığınız mevcut System.Json.JsonObject
bir dosyadan oluşturur:
var je = JsonElement.FromFile ("json.sample");
using (var reader = File.OpenRead ("json.sample"))
return JsonElement.FromJson (JsonObject.Load (reader) as JsonObject, arg);
MT ile JSON kullanma hakkında daha fazla bilgi için. D, bkz . JSON Öğesi İzlenecek Yol öğreticisi.
Diğer Özellikler
Çekme-Yenileme Desteği
Çekme-yenileme, başlangıçta Tweetie2 uygulamasında bulunan ve birçok uygulama arasında popüler bir efekt haline gelen görsel bir efekttir.
İletişim kutularınıza otomatik yenileme desteği eklemek için yalnızca iki şey yapmanız gerekir: kullanıcı verileri çektiğinde bildirim almak için bir olay işleyicisi bağlayın ve verilerin yüklendiği zamanı varsayılan durumuna geri dönmek için bilgilendirin DialogViewController
.
Bir bildirim bağlamak basittir; şunun RefreshRequested
gibi üzerindeki olayına DialogViewController
bağlanın:
dvc.RefreshRequested += OnUserRequestedRefresh;
Ardından yönteminizde OnUserRequestedRefresh
bazı veri yüklemelerini kuyruğa alır, ağdan veri isteyebilir veya verileri hesaplamak için bir iş parçacığı döndürebilirsiniz. Veriler yüklendikten sonra, yeni verilerin içinde olduğunu bildirmeniz DialogViewController
ve görünümü varsayılan durumuna geri yüklemek için komutunu çağırarak ReloadComplete
bunu yapmanız gerekir:
dvc.ReloadComplete ();
Arama Desteği
Aramayı desteklemek için özelliği üzerinde DialogViewController
ayarlayınEnableSearch
. Ayrıca, arama çubuğunda filigran metni olarak kullanılacak özelliğini de ayarlayabilirsiniz SearchPlaceholder
.
Arama, kullanıcı yazarken görünümün içeriğini değiştirir. Görünür alanları arar ve bunları kullanıcıya gösterir. , DialogViewController
program aracılığıyla sonuçlarda yeni bir filtre işlemi başlatmak, sonlandırmak veya tetiklemek için üç yöntemi kullanıma sunar. Bu yöntemler aşağıda listelenmiştir:
StartSearch
FinishSearch
PerformFilter
Sistem genişletilebilir olduğundan, isterseniz bu davranışı değiştirebilirsiniz.
Arka Plan Görüntüsü Yükleme
MonoTouch.Dialog, TweetStation uygulamasının görüntü yükleyicisini içerir. Bu görüntü yükleyici arka planda görüntüleri yüklemek için kullanılabilir, önbelleğe almayı destekler ve görüntü yüklendiğinde kodunuzu bilgilendirebilir.
Ayrıca giden ağ bağlantılarının sayısını da sınırlandıracaktır.
Görüntü yükleyici sınıfına ImageLoader
uygulanır, tek yapmanız gereken yöntemini çağırmaktır DefaultRequestImage
. Yüklemek istediğiniz görüntü için Uri'yi ve görüntü yüklendiğinde çağrılacak arabirimin IImageUpdated
bir örneğini sağlamanız gerekir.
Örneğin, aşağıdaki kod url'den içine bir BadgeElement
görüntü yükler:
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")
}
};
ImageLoader sınıfı, şu anda bellekte önbelleğe alınmış olan tüm görüntüleri serbest bırakmak istediğinizde çağırabileceğiniz bir Temizleme yöntemini kullanıma sunar. Geçerli kodun 50 resim için önbelleği vardır. Farklı bir önbellek boyutu kullanmak istiyorsanız (örneğin, görüntülerin 50 görüntünün çok fazla olması için çok büyük olmasını bekliyorsanız), Yalnızca ImageLoader örnekleri oluşturabilir ve önbellekte tutmak istediğiniz görüntü sayısını geçirebilirsiniz.
Öğe Hiyerarşisi Oluşturmak için LINQ Kullanma
LINQ ve C#'nin başlatma söz diziminin akıllı kullanımı aracılığıyla LINQ, öğe hiyerarşisi oluşturmak için kullanılabilir. Örneğin, aşağıdaki kod bazı dize dizilerinden bir ekran oluşturur ve her StringElement
birine geçirilen anonim bir işlev aracılığıyla hücre seçimini işler:
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"); })
}
};
Bu, neredeyse tamamen verilerden karmaşık uygulamalar oluşturmak için bir XML veri deposu veya veritabanındaki verilerle kolayca birleştirilebilir.
MT genişletiyor. D
Özel Öğeler Oluşturma
Var olan bir Öğeden devralarak veya kök sınıf Öğesinden türeterek kendi öğenizi oluşturabilirsiniz.
Kendi Öğenizi oluşturmak için aşağıdaki yöntemleri geçersiz kılmak istersiniz:
// 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);
Öğenizin değişken boyutu varsa, tek bir yöntem içeren arabirimini uygulamanız IElementSizing
gerekir:
// Returns the height for the cell at indexPath.Section, indexPath.Row
float GetHeight (UITableView tableView, NSIndexPath indexPath);
Döndürülen hücreyi çağırarak base.GetCell(tv)
ve özelleştirerek yönteminizi GetCell
uygulamayı planlıyorsanız, öğesiniz için benzersiz olacak bir anahtar döndürmek için özelliğini de geçersiz kılmanız CellKey
gerekir, örneğin:
static NSString MyKey = new NSString ("MyKey");
protected override NSString CellKey {
get {
return MyKey;
}
}
Bu, ve için değil, birçok öğe için StringElement
StyledStringElement
çalışır, ancak bunlar çeşitli işleme senaryoları için kendi anahtar kümesini kullanır. Kodu bu sınıflarda çoğaltmanız gerekir.
DialogViewControllers (DVCs)
Hem Yansıma hem de Öğeler API'si aynı DialogViewController
kullanır. Bazen görünümün görünümünü özelleştirmek veya temel URI oluşturmanın ötesine geçmek için bazı özelliklerini UITableViewController
kullanmak isteyebilirsiniz.
DialogViewController
yalnızca öğesinin UITableViewController
alt sınıfıdır ve bir öğesini özelleştirdiğiniz gibi özelleştirebilirsinizUITableViewController
.
Örneğin, liste stilini veya Plain
olarak Grouped
değiştirmek istiyorsanız, denetleyiciyi oluştururken özelliğini değiştirerek bu değeri ayarlayabilirsiniz, örneğin:
var myController = new DialogViewController (root, true) {
Style = UITableViewStyle.Grouped;
}
öğesinin DialogViewController
arka planını ayarlamak gibi daha gelişmiş özelleştirmeler için, aşağıdaki örnekte gösterildiği gibi alt sınıfa alır ve uygun yöntemleri geçersiz kılarsınız:
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;
}
}
Başka bir özelleştirme noktası, içinde DialogViewController
aşağıdaki sanal yöntemlerdir:
public override Source CreateSizingSource (bool unevenRows)
Bu yöntem, hücrelerinizin eşit boyutlandırıldığı durumlar için alt sınıfını DialogViewController.Source
veya hücreleriniz eşit değilse alt sınıfını DialogViewController.SizingSource
döndürmelidir.
Yöntemlerden herhangi birini yakalamak için bu geçersiz kılmayı UITableViewSource
kullanabilirsiniz. Örneğin TweetStation, kullanıcının ne zaman en üste kaydığını izlemek ve okunmamış tweet sayısını buna göre güncelleştirmek için bunu kullanır.
Doğrulama
Web sayfaları ve masaüstü uygulamaları için uygun modeller doğrudan iPhone etkileşim modeline eşlenmediğinden öğeler kendilerini doğrulama sağlamaz.
Veri doğrulama yapmak istiyorsanız, kullanıcı girilen verilerle bir eylem tetiklediğinde bunu yapmalısınız. Örneğin, üst araç çubuğundaki Bitti veya İleri düğmesi ya da bir sonraki aşamaya gitmek için düğme olarak kullanılanlarStringElement
.
Burada temel giriş doğrulaması ve bir sunucuyla kullanıcı/parola bileşiminin geçerliliğini denetleme gibi daha karmaşık bir doğrulama gerçekleştirebilirsiniz.
Kullanıcıya bir hatayı nasıl bildirdiğiniz uygulamaya özgüdür. Bir ipucu açabilir UIAlertView
veya ipucu gösterebilirsiniz.
Özet
Bu makalede MonoTouch.Dialog hakkında birçok bilgi ele alınmıştır. Bu makalede MT'nin temelleri ele alınmıştı. D, MT.D'yi oluşturan çeşitli bileşenleri çalışır ve kapsar. Ayrıca, MT tarafından desteklenen çok sayıda öğe ve tablo özelleştirmesi de gösterildi. D ve mt nasıl tartışıldı. D özel öğelerle genişletilebilir. Ayrıca MT'de JSON desteği açıklanmıştır. JSON'dan dinamik olarak öğe oluşturmaya olanak tanıyan D.
İlişkili Bağlantılar
- İzlenecek Yol: Öğeler API’sini kullanarak uygulama oluşturma
- İzlenecek Yol: Yansıma API’sini kullanarak uygulama oluşturma
- İzlenecek Yol: Kullanıcı Arabirimi oluşturmak için bir JSON Öğesini Kullanma
- MonoTouch.Dialog JSON İşaretlemeyi
- Github'da MonoTouch İletişim Kutusu
- UITableViewController Sınıf Başvurusu
- UINavigationController Sınıf Başvurusu