Xamarin.iOS için MonoTouch.Dialog'a Giriş
MT olarak adlandırılan MonoTouch.Dialog. Kısaca D, geliştiricilerin görünüm denetleyicileri, tablolar vb. oluşturmak yerine bilgileri kullanarak uygulama ekranları ve gezinti oluşturmalarına olanak sağlayan hızlı bir kullanıcı arabirimi geliştirme araç setidir. Bu nedenle, kullanıcı arabirimi geliştirme ve kod azaltma için önemli bir basitleştirme sağlar. Örneğin, aşağıdaki ekran görüntüsünü dikkate alın:
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 çok fazla yeniden ad kod olur. Örneğin, bir tabloya her ihtiyaç duyulacak zaman, bu tabloyu doldurmak için bir veri kaynağı gerekir. Bir gezinti denetleyicisi aracılığıyla bağlanan iki tablo tabanlı ekran olan bir uygulamada, her ekran aynı kodun çok büyük bir aynısını kullanır.
MT. D, bu kodun hepsini tablo oluşturmak için genel bir API'de kapsülleerek bunu basitleştiriyor. Ardından bu API'nin üzerinde, daha da kolay hale getirir bildirime sahip bir nesne bağlama söz dizimi sağlayan 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 hiyerarşik bir öğe ağacı oluşturmaya dayalıdır. Öğeler API'si, geliştiricilere KULLANıCı oluşturma konusunda en fazla esneklik ve denetim sunar. Buna ek olarak, Öğeler API'si, hem inanılmaz hızlı bildirim hem de bir sunucudan dinamik kullanıcı arabirimi oluşturma özelliğine olanak sağlayan JSON aracılığıyla bildirimli tanım için gelişmiş destek içerir.
- Üst Düzey Yansıma API'si– BağlamaAPI'si olarak da bilinir; burada sınıflar ui ipuçları ve ardından MT ile açıklama ek açıklamalı olarak gelir. D, nesneleri temel alan ekranlar oluşturur ve ekranda görüntülenen (ve isteğe bağlı olarak düzenlenen) ile temel alınan nesne backing arasında bir bağlama sağlar. Yukarıdaki örnekte Yansıma API'si kullanımı gösterildi. Bu API, öğeler API'sinin yaptığı ayrıntılı denetimi sağlamaz, ancak sınıf özniteliklerine göre öğe hiyerarşisini otomatik olarak oluşturmayla karmaşıklığı daha da azaltır.
MT. D, ekran oluşturma için çok sayıda yerleşik kullanıcı arabirimi öğeleriyle birlikte gelir, ancak özelleştirilmiş öğelere ve gelişmiş ekran düzenlerine olan ihtiyacı da tanır. Bu nedenle genişletilebilirlik, API'de yer alan birinci sınıf bir öne çıkandır. Geliştiriciler mevcut öğeleri genişlet veya yenilerini oluşturabilir ve ardından sorunsuz bir şekilde tümleştirin.
Ayrıca MT. D,"yenilemeye çekme" desteği, zaman uyumsuz görüntü yükleme ve arama desteği gibi yerleşik bir dizi ortak iOS UX özelliğine sahiptir.
Bu makalede MT ile çalışmaya kapsamlı bir bakış yer alır. D, dahil:
- MT. D Bileşenleri – Bu, MT'yi temel alan sınıfları anlamaya odaklanır. Hızlı bir şekilde çalışmayı etkinleştirmek için D.
- Öğeler Başvurusu – MT.D.'nin yerleşik öğelerinin kapsamlı listesi.
- Gelişmiş Kullanım– Bu, yenilenecek çekme, arama, arka plan görüntüsü yükleme, öğe hiyerarşileri oluşturmak için LINQ kullanma ve MT.D ile kullanmak üzere özel öğeler, hücreler ve denetleyiciler oluşturma gibi gelişmiş özellikleri kapsar.
MT'yi ayarlama. D
MT. D, Xamarin.iOS ile dağıtılır. Bunu kullanmak için Visual Studio 2017 veya Mac için Visual Studio'de bir Xamarin.iOS projesinin Başvurular düğümüne sağ tıklayın ve MonoTouch.Dialog-1 derlemesi için bir başvuru ekleyin. Ardından, using MonoTouch.Dialog gerektiğinde kaynak kodunuza deyimleri ekleyin.
MT 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, başlık altında bir Öğe hiyerarşisi oluşturur. Ayrıca, önceki bölümde bahsedilen JSON desteği de Öğeler'i oluşturur. Bu nedenle, MT.D'nin kurucu parçaları hakkında temel bir anlayışa sahip olmak önemlidir.
MT. D, aşağıdaki dört parçayı kullanarak ekranlar derleme:
- DialogViewController
- RootElement
- Section
- Öğe
DialogViewController
DialogViewControllerveya kısaca DVC, tablosundan devralınan bir ekranı temsil eder. DVC'ler aynı normal UITableViewController'lar gibi bir gezinti denetleyicisine itilir.
RootElement
RootElement, DVC'ye yönelik öğeler için en üst düzey kapsayıcıdır. Daha sonra Öğeler içeren Bölümler içerir. RootElements işlenmez; bunun yerine bunlar yalnızca gerçekten işlenen kapsayıcılardır. Bir DVC'ye RootElement 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, aşağıdaki ekran görüntüsünde olduğu gibi isteğe bağlı olarak metin, hatta özel görünümler gibi bir üst bilgi ve alt bilgi 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çı göstermektedir:
Bölümler ve RootElements hakkında daha fazla bilgi
Şimdi RootElements ve Sections öğelerini daha ayrıntılı bir şekilde ele aalı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 Öğe bulmak için kullanılır. Örneğin, aşağıdaki ekran görüntüsünde sol tarafta, sağ tarafta ayrıntı ekranı başlığını içeren bir hücrenin bulunduğu bir tablo ve seçili şarapların değeriyle birlikte "Pasta" gösterilir.
sol tarafta, Sağ tarafta Yer alan Ayrıntı ekranı başlığını ve seçili meyvenin değerini içeren bir tabloyu gösterir. Aşağıdaki ekran görüntüsünde, sol tarafta, sağ tarafta Yer alan Ayrıntı ekranı başlığını içeren bir hücrenin yanı sıra seçilinin değeriyle birlikte Pasta'nın bulunduğu bir tablo gösterilir
Kök öğeler, yukarıda gösterildiği gibi yeni bir iç içe geçmiş yapılandırma sayfasının yüklenmesini tetiklemek için Bölümler içinde de kullanılabilir. Bu modda kullanılırken, sağlanan açıklamalı alt yazı bir bölüm içinde işlenirken kullanılır ve alt sayfa için Başlık olarak da kullanılır. Örnek:
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ı "Pasta" öğesine dokunularak MonoTouch.Dialog yeni bir sayfa oluşturacak ve kök "Pasta" ve üç değere sahip bir radyo grubu olacak şekilde bu sayfaya gidecek.
Radyo grubu, "2" değerini RadioGroup'a aktarmız nedeniyle bu örnekte "Pasta" bölümünde "Chocolate Chocolate" öğesini seçecek. Bu, listede 3. öğenin (sıfır dizin) seç olduğu anlamına gelir.
Add yöntemini çağırma veya C# 4 başlatıcı söz dizimi kullanarak bölümler ekler. Ekleme yöntemleri, animasyonla bölümler eklemek için sağlanır.
RootElement'i bir Grup örneğiyle (RadioGroup yerine) oluşturmanız, Bir Bölümde görüntülendiğinde RootElement'in özet değeri, Group.Key değeriyle aynı anahtara sahip tüm BooleElements ve CheckboxElements'in toplam sayısı olacaktır.
Bölümler
Bölümler, ekranda öğeleri grup için kullanılır ve RootElement'in tek geçerli doğrudan alt öğeleridir. Bölümler, yeni RootElements dahil olmak üzere standart öğelerden herhangi birini içerebilir.
Bir bölüme eklenmiş RootElement'ler, daha derin bir düzeye gitmek için kullanılır.
Bölümler dize olarak veya UIViews olarak üst bilgiler ve alt bilgiler içerir. Genellikle yalnızca dizeleri kullanır, ancak özel UI'ler oluşturmak için üst bilgi veya alt bilgi olarak herhangi bir UIView kullanabilirsiniz. Bunları oluşturmak için aşağıdaki gibi bir dize kullanabilirsiniz:
var section = new Section ("Header", "Footer");
Görünümleri kullanmak için, görünümleri oluşturucuya geçmeniz gerekir:
var header = new UIImageView (Image.FromFile ("sample.png"));
var section = new Section (header);
Bildirilecek
NSAction'ın işlenmesi
MT. D, geri NSAction çağırmaları işlemeye bir temsilci olarak ortaya çıkar.
Örneğin, MT.D tarafından oluşturulan bir tablo hücresi için dokunma olayı işlemek istediğinizi diyelim. MT ile bir öğe oluştururken. D, aşağıda gösterildiği gibi bir geri çağırma işlevi girin:
new Section () {
new StringElement ("Demo Callback", delegate { Console.WriteLine ("Handled"); })
}
Öğe Değerini Alma
özelliğiyle Element.Value birlikte, geri çağırma diğer öğelerde ayarlanmış değeri alabilir. Örneğin, aşağıdaki kodu düşünün:
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 eksiksiz bir izlenecek yolu için Bkz. Öğeler API'si Adım Adım Kılavuz öğreticisi.
Kullanıcı alttaki tablo hücresine bassa, anonim işlevde kod yürütülür ve örnekteki değeri element Mac için Visual Studio. element
Built-In Öğeleri
MT. D, Öğeler olarak bilinen bir dizi yerleşik tablo hücresi ile birlikte gelir. Bu öğeler dizeler, float'lar, tarihler ve hatta görüntüler gibi tablo hücrelerinde birkaç farklı tür görüntülemek için kullanılır. Her öğe, veri türünü uygun şekilde görüntülemeyi sağlar. Örneğin, boole öğesi değerini değiştirmek için bir anahtar görüntüler. Benzer şekilde, bir float öğesi kayan değeri 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 desteklemeye yönelik daha karmaşık öğeler de vardır. Örneğin, bir Web sayfası seçildiğinde bir 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 Value , herhangi bir zamanda öğesinin geçerli değerini tutan ortak bir özellik sunar. Kullanıcı uygulamayı kullandığında otomatik olarak güncelleştirilir.
Bu, MonoTouch. Dialog 'un parçası olan tüm öğelere yönelik davranıştır, ancak kullanıcı tarafından oluşturulan öğeler için gerekli değildir.
String öğesi
Bir StringElement tablo hücresinin sol tarafındaki bir başlığı ve hücrenin sağ tarafındaki dize değerini gösterir.
Bir düğme olarak kullanmak için bir StringElement temsilci sağlayın.
new StringElement ("Click me", () => {
new UIAlertView("Tapped", "String Element Tapped", null, "ok", null).Show();
});
Stilli dize öğesi
StyledStringElement, Dizelerin yerleşik tablo hücresi stilleri veya özel biçimlendirme kullanılarak sunulmasını sağlar.
StyledStringElementSınıfı öğesinden türetilir StringElement , ancak geliştiricilerin yazı tipi, metin rengi, arka plan hücresi rengi, satır sonu modu, görüntülenecek satır sayısı ve bir aksesuar görüntülenip görüntülenmemelidir gibi birçok özelliği özelleştirmesini sağlar.
Multiline öğesi
Entry öğesi
EntryElementAdının gösterdiği gibi, Kullanıcı girişi almak için kullanılır. Karakterlerin gizli olduğu normal dizeleri veya parolaları destekler.
Üç değerle başlatılır:
- Kullanıcıya gösterilecek girdinin başlık yazısı.
- Yer tutucu metin (Bu, kullanıcıya bir ipucu sağlayan, gri metin olan metindir).
- Metnin değeri.
Yer tutucu ve değer null olabilir. Ancak, başlık gereklidir.
Herhangi bir noktada, Value özelliğine erişmek öğesinin değerini alabilir EntryElement .
Ayrıca KeyboardType özellik, oluşturma zamanında veri girişi için istenen klavye türü stiline ayarlanabilir. Bu, klavyeyi aşağıda listelenen değerleri kullanarak yapılandırmak için kullanılabilir UIKeyboardType :
- Sayısal
- Telefon
- Url
- E-posta
Boolean öğesi
CheckBox öğesi
Radio öğesi
RadioElementRadioGroup , İçinde bir için belirtilmesini gerektirir RootElement .
mtRoot = new RootElement ("Demos", new RadioGroup("MyGroup", 0));
RootElements radyo öğelerini koordine etmek için de kullanılır. RadioElementÜyeler birden çok bölüme yayılabilir (örneğin, halka ton seçicisine benzer bir şeyi uygulamak ve sistem zil seslerine özel halka tonlarını ayırmak için). Özet görünümü şu anda seçili olan radyo öğesini gösterir. Bunu kullanmak için aşağıdaki RootElement gibi grup Oluşturucusu ile oluşturun:
var root = new RootElement ("Meals", new RadioGroup ("myGroup", 0));
İçindeki grubun adı, RadioGroup içerilen sayfada (varsa) seçili değeri göstermek için kullanılır ve bu durumda sıfır olan değer, seçilen ilk öğenin dizinidir.
Rozet öğesi
Float öğesi
Activity öğ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 sunulur:
Time öğesi
TimeElement öğesine karşılık gelen hücre seçildiğinde aşağıda gösterildiği gibi bir zaman seçici sunulur:
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 sunulur:
HTML öğesi
, HTMLElementCaption Özelliğinin değerini tablo hücresinde görüntüler. Seçili Url olan öğe, UIWebView aşağıda gösterildiği gibi bir denetime yüklenir:
İleti öğesi
Daha fazla öğe yükle
Kullanıcıların listenize daha fazla öğe yüklemesine izin vermek için bu öğeyi kullanın. Normal ve yükleme açıklamalı altyazıları ve yazı tipi ve metin rengini özelleştirebilirsiniz.
UIActivityGösterge animasyon başlar ve Kullanıcı hücreye dokunduğunda yükleme başlığı görüntülenir ve sonra NSAction oluşturucuya geçirilen Oluşturucu yürütülür. İçindeki kodunuz NSAction tamamlandığında, UIActivity gösterge animasyonu durdurup normal başlık yeniden görüntülenir.
UIView öğesi
Ayrıca, kullanılarak herhangi bir özel de UIView görüntülenebilir UIViewElement .
Owner-Drawn öğesi
Bu öğe, soyut bir sınıf olduğundan alt sınıflanmış olmalıdır. Height(RectangleF bounds)Öğesinin yüksekliğini döndürmelisiniz ve Draw(RectangleF bounds, CGContext context, UIView view) 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, altsınıflama a 'nın ağır bir şekilde uygulanmasını UIView ve döndürülecek hücreye yerleştirmekten yalnızca iki basit geçersiz kılma uygulamanız gerektiğini bırakır. Dosyadaki örnek uygulamada daha iyi bir örnek uygulama görebilirsiniz DemoOwnerDrawnElement.cs .
Sınıfı uygulamanın çok basit bir örneği aşağıda verilmiştir:
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
, JsonElementRootElement Bir RootElement yerel veya uzak URL 'den iç içe alt öğenin içeriğini yükleyebilmeleri için bir alt sınıfıdır.
, JsonElementRootElement İki biçimde örnek oluşturulabilir. Bir sürüm RootElement , içeriği isteğe bağlı olarak yükleyecek bir oluşturur. Bunlar, JsonElement sonunda fazladan bir bağımsız değişken alan oluşturucular kullanılarak oluşturulur, içeriğin yükleneceği URL:
var je = new JsonElement ("Dynamic Data", "https://tirania.org/tmp/demo.json");
Diğer form, verileri yerel bir dosyadan veya System.Json.JsonObject zaten ayrıştırmış olduğunuz mevcut 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);
Lt ile JSON kullanma hakkında daha fazla bilgi için. D, bkz. JSON öğesi Izlenecek yol öğreticisi.
Diğer özellikler
Yenileme için çekme desteği
Yenilemeye alma, ilk olarak Tweetie2 uygulamasında bulunan ve birçok uygulama arasında popüler bir etkiye sahip olan görsel bir etkiye sahiptir.
İletişim kutularınız için otomatik yenileme desteği eklemek istiyorsanız, yalnızca iki şey yapmanız gerekir: Kullanıcı verileri çeker ve DialogViewController verilerin yüklendiği zaman, varsayılan durumuna geri dönmek için bir olay işleyicisini bilgilendirir.
Bir bildirimin takılarak basit olması; üzerinde olaya yalnızca aşağıdaki RefreshRequestedDialogViewController gibi bağlanın:
dvc.RefreshRequested += OnUserRequestedRefresh;
Daha sonra yönteminizin içinde OnUserRequestedRefresh , bazı veri yüklemeyi sıraya alır, net 'ten bazı verileri ister veya bir iş parçacığını alarak verileri hesaplamalısınız. Veriler yüklendikten sonra, DialogViewController yeni verilerin içinde olduğunu bilgilendirmeli ve görünümü varsayılan durumuna geri yüklemek için şunu çağırarak yapmanız gerekir ReloadComplete :
dvc.ReloadComplete ();
Destek ara
Aramayı desteklemek için, özelliğini ' EnableSearch de ayarlayın DialogViewController . Ayrıca SearchPlaceholder özelliği, arama çubuğunda filigran metni olarak kullanılacak şekilde ayarlayabilirsiniz.
Arama, görünümün içeriğini Kullanıcı türleri olarak değiştirecek. Görünür alanları arar ve kullanıcıya olanları gösterir. , DialogViewController Sonuçlar üzerinde yeni bir filtre işlemini programlı bir şekilde başlatmak, sonlandırmak veya tetiklemek için üç yöntem sunar. Bu yöntemler aşağıda listelenmiştir:
StartSearchFinishSearchPerformFilter
Sistem Genişletilebilir, bu sayede isterseniz bu davranışı değiştirebilirsiniz.
Arka plan görüntüsünü yükleme
MonoTouch. Dialog, çok sayıda Etstation uygulamasının görüntü yükleyicisini içerir. Bu görüntü yükleyicisi arka planda görüntü yüklemek için kullanılabilir, önbelleğe almayı destekler ve görüntü yüklendiğinde kodunuza bildirimde bulunabilir.
Ayrıca giden ağ bağlantısı sayısını da sınırlayacaktır.
Görüntü yükleyici, ImageLoader sınıfında uygulanır, tüm yapmanız gereken DefaultRequestImage yöntemi çağırır, yüklemek Istediğiniz görüntünün URI 'sini sağlamanız gerekir ve IImageUpdated Bu, görüntü yüklendiğinde çağrılacak olan bir arabirimin örneğini belirtmeniz gerekecektir.
Örneğin, aşağıdaki kod bir URL 'den bir görüntü yükler 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")
}
};
ImageLoader sınıfı, bellekte önbelleğe alınmış olan tüm görüntüleri serbest bırakmak istediğinizde çağırabilmeniz için bir temizleme yöntemi sunar. Geçerli kodun 50 resimleri için bir önbelleği vardır. Farklı bir önbellek boyutu kullanmak istiyorsanız (örneğin, görüntülerin çok büyük olduğu 50 görüntünün ç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# başlatma sözdiziminin zekice kullanımı ile, LINQ bir öğe hiyerarşisi oluşturmak için kullanılabilir. Örneğin, aşağıdaki kod bazı dize dizilerinden bir ekran oluşturur ve her birine geçirilen anonim bir işlev aracılığıyla hücre seçimini işler 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"); })
}
};
Bu, neredeyse tamamen verilerden karmaşık uygulamalar oluşturmak için bir XML veri deposuyla veya bir veritabanından alınan verilerle kolayca birleştirilebilir.
MT 'yi genişletme TID
Özel öğeler oluşturma
Varolan bir öğeden devralarak ya da kök sınıf öğesinden türeterek kendi öğesini oluşturabilirsiniz.
Kendi öğesini oluşturmak için aşağıdaki yöntemleri geçersiz kılmak isteyeceksiniz:
// 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 bir değişken boyutu varsa, IElementSizing bir yöntemi içeren arabirimini uygulamanız gerekir:
// Returns the height for the cell at indexPath.Section, indexPath.Row
float GetHeight (UITableView tableView, NSIndexPath indexPath);
GetCellDöndürülen hücreyi çağırarak ve özelleştirerek yönteminizin uygulanması planlanıyorsanız base.GetCell(tv) , aşağıdaki CellKey gibi, öğe için benzersiz olacak bir anahtar döndürecek şekilde özelliği de geçersiz kılmanız gerekir:
static NSString MyKey = new NSString ("MyKey");
protected override NSString CellKey {
get {
return MyKey;
}
}
Bu, çoğu öğe için geçerlidir, ancak, StringElementStyledStringElement çeşitli işleme senaryoları için kendi anahtar kümesini kullanır. Bu sınıflarda kodu çoğaltmanız gerekir.
DialogViewControllers (DVCs)
Hem yansıma hem de öğeler API 'SI aynı şekilde kullanılır DialogViewController . Bazen görünümün görünümünü özelleştirmek veya UITableViewController temel uıof oluşturma ötesinde daha fazla olan bazı özelliklerini kullanmak isteyebilirsiniz.
DialogViewControllerYalnızca öğesinin bir alt sınıfıdır UITableViewController ve bunu özelleştirmek için aynı şekilde özelleştirebilirsiniz UITableViewController .
Örneğin, liste stilini veya ya da olarak değiştirmek isterseniz GroupedPlain , denetleyiciyi oluştururken bu değeri aşağıdaki gibi ayarlayabilirsiniz:
var myController = new DialogViewController (root, true) {
Style = UITableViewStyle.Grouped;
}
Arka planını ayarlama gibi daha gelişmiş özelleştirmeler için, DialogViewController Aşağıdaki örnekte gösterildiği gibi, alt sınıfı ve uygun yöntemleri geçersiz kılabilirsiniz.
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çindeki aşağıdaki sanal yöntemlerdir DialogViewController :
public override Source CreateSizingSource (bool unevenRows)
Bu yöntem DialogViewController.Source , hücrelerden oluşan eşit boyutta olduğu durumlarda veya hücrelerden biri eşit değilse bir alt sınıfı döndürmelidir DialogViewController.SizingSource .
Bu geçersiz kılmayı, yöntemlerden herhangi birini yakalamak için kullanabilirsiniz UITableViewSource . Örneğin, bu , kullanıcının en üst kısımdaki zamanı izlemek için bunu kullanır ve okunmamış Evcil hayvan sayısını uygun olarak güncelleştirir.
Doğrulama
web sayfaları ve masaüstü uygulamaları için uygun olan modeller doğrudan iPhone etkileşim modeliyle eşlenmediğinden, öğeler doğrulama sağlamaz.
Veri doğrulaması yapmak istiyorsanız, Kullanıcı girilen verilerle bir eylem harekete geçirdiğinde bunu yapmalısınız. Örneğin, üst araç çubuğunda bir bitti veya İleri düğmesi veya bir sonraki aşamaya gitmek için bir düğme olarak kullanılan bir düğme.
Bu, temel giriş doğrulamasını gerçekleştirdiğiniz ve sunucu ile bir kullanıcı/parola birleşiminin geçerliliğini denetlemek gibi daha karmaşık bir doğrulama gerçekleştirmediğiniz yerdir.
Bir hata kullanıcısına uygulamaya özgü bir sorun bildirme. Bir ipucu açılır veya bir UIAlertView İpucu gösterebilirsiniz.
Özet
Bu makale MonoTouch. Dialog hakkında çok fazla bilgi kapsamına alınmıştır. Bu, nasıl MT 'nin temellerini ele alınmaktadır. D işe yarar ve bu, MT. D oluşturan çeşitli bileşenleri kapsar. Ayrıca, MT tarafından desteklenen geniş kapsamlı öğe ve tablo özelleştirmeleri dizisini de gösterdi. D ve nasıl MT ile ele alınmaktadır? D, özel öğelerle genişletilebilir. Ayrıca, MT 'deki JSON desteğini de açıklandı. Bu, JSON 'dan dinamik olarak öğe oluşturulmasına izin veren 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 Işaretlemesi
- GitHub 'da MonoTouch Iletişim kutusu
- Uıtableviewcontroller sınıf başvurusu
- Uıınavigationcontroller sınıfı başvurusu






















