Xamarin. Mac 'teki ana hat görünümleri
Bu makalede, bir Xamarin. Mac uygulamasındaki ana hat görünümleriyle çalışma ele alınmaktadır. Xcode 'da ana hat görünümlerinin oluşturulmasını ve bakımının ve Interface Builder ve bunlarla programlı olarak çalışmasını açıklar.
Bir Xamarin. Mac uygulamasında C# ve .NET ile çalışırken, Objective-C ve Objective-C üzerinde çalışan bir geliştiricinin kullandığı ana hat görünümlerine erişebilirsiniz. Xamarin. Mac doğrudan Xcode ile tümleştiğinden, ana hat görünümlerinizi oluşturmak ve bakımını yapmak için Xcode 'un Interface Builder kullanabilirsiniz (ya da isteğe bağlı olarak bunları doğrudan C# kodunda oluşturabilirsiniz).
Ana hat görünümü, kullanıcının hiyerarşik veri satırlarını genişletmesine veya daralmasına izin veren bir tablo türüdür. Bir tablo görünümü gibi, bir ana hat görünümü bir ilgili öğe kümesi için verileri görüntüler ve bu öğelerin özniteliklerini temsil eden sütunları tek tek öğeleri ve sütunları temsil eder. Bir tablo görünümünden farklı olarak, bir ana hat görünümündeki öğeler düz bir listede değildir ve bir sabit sürücüdeki dosyalar ve klasörler gibi bir hiyerarşide düzenlenir.
Bu makalede, bir Xamarin. Mac uygulamasındaki ana hat görünümleriyle çalışmanın temelleri ele alınacaktır. Bu makalede kullanacağımız temel kavramları ve teknikleri kapsadığından, ilk olarak Hello, Mac makalesi, özellikle de xcode ve Interface Builder ve diğer ve eylemler bölümlerine giriş yapmanız önerilir.
Exposing C# classes / methods to Objective-CExposing C# classes / methods to Objective-C belgesinin bölümüne de göz atmak Isteyebilirsiniz, RegisterExport C# sınıflarınızı Objective-C nesneler ve Kullanıcı Arabirimi öğelerine bağlamak için kullanılan ve komutlarını açıklamaktadır.
Ana hat görünümlerine giriş
Ana hat görünümü, kullanıcının hiyerarşik veri satırlarını genişletmesine veya daralmasına izin veren bir tablo türüdür. Bir tablo görünümü gibi, bir ana hat görünümü bir ilgili öğe kümesi için verileri görüntüler ve bu öğelerin özniteliklerini temsil eden sütunları tek tek öğeleri ve sütunları temsil eder. Bir tablo görünümünden farklı olarak, bir ana hat görünümündeki öğeler düz bir listede değildir ve bir sabit sürücüdeki dosyalar ve klasörler gibi bir hiyerarşide düzenlenir.
Bir ana hat görünümündeki bir öğe diğer öğeleri içeriyorsa, Kullanıcı tarafından genişletilebilir veya daraltılabilirler. Genişletilebilir bir öğe, öğe daraltıldığında sağ tarafta işaret eden ve öğe genişletildiğinde aşağı işaret eden bir açıklama üçgeni görüntüler. Açıklama üçgenine tıkladığınızda öğenin genişlemesine veya daraltılıp daraltılmasına neden olur.
Ana hat görünümü (), NSOutlineView Tablo görünümünün () bir alt sınıfıdır NSTableView ve bu nedenle, davranışının çoğunu üst sınıfından devralır. Sonuç olarak, satır veya sütun seçme gibi bir tablo görünümü tarafından desteklenen birçok işlem, sütun başlıklarını sürükleyerek sütunları yeniden konumlandırma, ayrıca bir anahat görünümü tarafından da desteklenir. Xamarin. Mac uygulaması bu özelliklerin denetimine sahiptir ve belirli işlemlere izin vermek veya bu işlemleri engellemek için anahat görünümünün parametrelerini (kodda veya Interface Builder) yapılandırabilir.
Bir ana hat görünümü, bir veri kaynağını () temel alarak, NSOutlineViewDataSource gerekli olan satırları ve sütunları gereken şekilde sağlamak için kendi verilerini depolamaz.
Ana hat görünümü 'nin davranışı, anahat sütun yönetimini desteklemek için ana hat görünümü temsilcisinin () bir alt sınıfı sağlayarak özelleştirilebilir ve NSOutlineViewDelegate tek tek sütunlar ve satırlar için işlevselliği, satır seçimini ve düzenlemeyi, özel izlemeyi ve özel görünümleri seçmek üzere yazın.
Bir ana hat görünümü bir tablo görünümüyle ilgili davranış ve işlevselliğinin çoğunu paylaştığından, bu makaleye devam etmeden önce tablo görünümleri Belgelerimizi görmek isteyebilirsiniz.
Xcode 'da ana hat görünümleri oluşturma ve sürdürme
Yeni bir Xamarin. Mac Cocoa uygulaması oluşturduğunuzda, varsayılan olarak standart bir boş pencere alırsınız. Bu pencereler .storyboard projeye otomatik olarak dahil edilen bir dosyada tanımlanmıştır. Windows tasarımınızı düzenlemek için, Çözüm Gezginidosyasına çift tıklayın :
Bu, Xcode 'un Interface Builder pencere tasarımını açar:
outlineAna hat görünümü denetimlerini bulmayı kolaylaştırmak Için outline arama kutusuna yazın:
Bir ana hat görünümünü arabirim düzenleyicisindegörünüm denetleyicisine sürükleyin, görünüm denetleyicisinin içerik alanını doldurup, kısıtlama Düzenleyicisi'ndeki pencereyle birlikte küçülüp büyüdüğü yere ayarlayın:
Arabirim hiyerarşisinde anahat görünümünü seçin ve öznitelik denetçisindeaşağıdaki özellikler mevcuttur:
- Ana hat sütunu -hiyerarşik verilerin görüntülendiği tablo sütunu.
- Otomatik kaydetme ana hat sütunu -Eğer Ise , ana hat sütunu otomatik olarak kaydedilir ve uygulama çalıştırmaları arasında geri yüklenir.
- Girintileme -genişletilmiş bir öğe altındaki sütunları girintileme miktarı.
- Girinti şu hücreleri izler -Eğer , girintileme işareti hücrelerle birlikte girintilenir.
- Genişletilmiş öğeleri otomatik olarak kaydet -varsa , öğelerin Genişletilmiş/daraltılmış durumu otomatik olarak kaydedilir ve uygulama çalıştırmaları arasında geri yüklenir.
- Içerik modu -
NSCellverileri satırlarda ve sütunlarda göstermek için görünümler () veya hücreler () kullanmanıza izin verir. MacOS 10,7 ile başlayarak, görünümleri kullanmanız gerekir. - Kayan nokta grubu satırları - Tablo görünümü, kaydırılan hücreleri kayan hücreler olarak çizecek.
- Sütunlar -gösterilecek sütun sayısını tanımlar.
- Üst bilgiler -varsa sütunlarda üstbilgiler olur.
- Yeniden sıralama - Bu durumda, Kullanıcı tablodaki sütunları yeniden sıralamayı sürükleyebilirsiniz.
- Yeniden boyutlandırma - Kullanıcı sütun üst bilgilerini sütunları yeniden boyutlandırmak üzere sürükleyebilecektir.
- Sütun boyutlandırma -tablonun sütunları otomatik olarak nasıl boyutlandıracağı denetler.
- Vurgula -tablonun bir hücre seçildiğinde kullandığı vurgulama türünü denetler.
- Diğer Satırlar -varsa , başka herhangi bir satır arka plan rengine sahip olur.
- Yatay kılavuz -hücreler arasında yatay olarak çizilen kenarlık türünü seçer.
- Dikey kılavuz -hücreler arasında dikey olarak çizilen kenarlık türünü seçer.
- Kılavuz rengi -hücre kenarlık rengini ayarlar.
- Arka plan -hücre arka plan rengini ayarlar.
- Seçim -kullanıcının tabloda tablodaki hücreleri nasıl seçkullanılabileceğini denetlemenize izin verir:
- Birden çok ise , Kullanıcı birden çok satır ve sütun seçebilir.
- Sütun -varsa , Kullanıcı sütun seçebilir.
- Seç -IF , Kullanıcı bir satırı seçmek için bir karakter yazabilir.
- Boş : Kullanıcı bir satır veya sütun seçmek için gerekli değilse, tablo hiçbir seçim yapılmasına izin vermez.
- Otomatik kaydetme -tablolar biçiminin altında otomatik olarak kaydedileceği ad.
- Sütun bilgileri - sütunların sırası ve genişliği otomatik olarak kaydedilir.
- Satır sonları -hücrenin satır sonlarını nasıl işleyeceğini seçin.
- Son görünen satırı keser -Eğer hücre, verilerin sınırları içine uyamayacak şekilde kesilir.
Önemli
Eski bir Xamarin. Mac uygulamasını korumadığınız müddetçe, temel NSView tablo görünümlerinde tabanlı ana hat görünümleri kullanılmalıdır NSCell . NSCell Eski olarak değerlendirilir ve ileri doğru şekilde desteklenmiyor olabilir.
Arabirim hiyerarşisinde bir tablo sütunu seçin ve öznitelik denetçisindeaşağıdaki özellikler mevcuttur:
- Title -sütunun başlığını ayarlar.
- Hizalama -hücrelerin içindeki metnin hizalamasını ayarlayın.
- Başlık yazı tipi -hücrenin başlık metninin yazı tipini seçer.
- Anahtar Sırala -sütundaki verileri sıralamak için kullanılan anahtardır. Kullanıcı bu sütunu sıralamıyorsa boş bırakın.
- Seçici -sıralamayı gerçekleştirmek Için kullanılan eylemdir . Kullanıcı bu sütunu sıralamıyorsa boş bırakın.
- Order -sütun verileri için sıralama sıralarıdır.
- Yeniden boyutlandırma -sütun için yeniden boyutlandırma türünü seçer.
- Düzenlenebilir - Kullanıcı hücre tabanlı tablodaki hücreleri düzenleyebilir.
- Gizli -ise , sütun gizlidir.
Ayrıca, (sütunun sağ tarafında dikey olarak ortalanmış) sola veya sağa sürükleyerek sütunu yeniden boyutlandırabilirsiniz.
Tablo görünümümüzde her bir sütunu seçemm ve birinci sütuna bir başlık ve ikincisini verlim Details .
Arabirim hiyerarşisinde bir tablo hücresi görünümü ( NSTableViewCell ) seçin NSTableViewCell ve öznitelik denetçisindeaşağıdaki özellikler mevcuttur:
Bunlar standart bir görünümün tüm özellikleridir. Ayrıca, bu sütun için satırları yeniden boyutlandırma seçeneğiniz de vardır.
Arabirim hiyerarşisinde bir tablo görünümü hücresi seçin (varsayılan olarak, bu bir ' dir NSTextField ) ve öznitelik denetçisindeaşağıdaki özellikler mevcuttur: NSTextField
Burada ayarlanacak standart metin alanının tüm özelliklerine sahip olacaksınız. Varsayılan olarak, bir sütundaki bir hücrenin verilerini göstermek için standart bir metin alanı kullanılır.
Arabirim hiyerarşisinde bir tablo hücresi görünümü ( NSTableFieldCell ) seçin NSTableFieldCell ve öznitelik denetçisindeaşağıdaki özellikler mevcuttur:
Buradaki en önemli ayarlar şunlardır:
- Düzen -bu sütundaki hücrelerin nasıl düzenlendiğini seçin.
- Tek satır modunu kullanır - hücre tek bir satırla sınırlıdır.
- İlk Çalışma Zamanı Düzeni Genişliği - ise hücre, uygulama ilk kez çalıştırılırken görüntülendiğinde bunun için ayarlanmış genişliği (el ile veya otomatik olarak) tercih eder.
- Eylem - Hücre için Eylemi Düzenle'nin ne zaman gönderildiğini kontrol eder.
- Davranış - Hücrenin seçilebilir mi yoksa düzenlenebilir mi olduğunu tanımlar.
- Zengin Metin - ise hücre biçimlendirilmiş ve stilli metin biçimlendirilmiş bir metin biçimlendirilmiş olabilir.
- Geri Al - ise, hücre bunun geri alma davranışından sorumlu olduğunu varsayıyordur.
Arabirim Hiyerarşisi'nde NSTableFieldCell tablo sütunlarının en altındaki Tablo Hücresi Görünümünü ( ) NSTableFieldCell
Bu, verilen sütun için oluşturulan tüm hücreler için temel Düzen olarak kullanılan Tablo HücreSi Görünümünü düzenlemenizi sağlar.
Eylemler ve Çıkışlar Ekleme
Diğer Cocoa kullanıcı arabirimi denetimlerinde olduğu gibi, Ana Hat Görünümü'mz ve bu görünümün sütun ve hücrelerini Eylemler ve Çıkışlar'ı kullanarak C# koduna (gereken işlevlere göre) ortaya çıkarmamız gerekir.
bu işlem, ortaya çıkarmak istediğiniz herhangi bir Ana Hat Görünümü öğesi için aynıdır:
Yardımcı Düzenleyici'ye geçişin ve dosyanın seçili olduğundan emin olun:
Arabirim Hiyerarşisi'nin Ana Hat Görünümü'ne tıklayınve dosyaya sürükleyin.
Ana Hat Görünümü için adlı bir Çıkış oluşturun:
ve olarak da adlandırılan tablo sütunları için Çıkışlar
DetailsColumnoluşturun:Değişikliklerinizi kaydedin ve Xcode ile Mac için Visual Studio geri dön.
Daha sonra, kod yazacak ve uygulama çalıştır olduğunda ana hat için bazı verileri görüntüley ineriz.
Ana Hat Görünümünü Doldurmak
Ana Hat Görünümü'miz Interface Builder bir Çıkış aracılığıyla ortaya çıkararak, bunu doldurmak için C# kodunu oluşturmamız gerekir.
İlk olarak, tek tek satırlar ve alt ürün grupları için bilgileri Product tutmak için yeni bir sınıf oluştur o zaman. Dosya Çözüm Gezginisağ tıklayın ve yeni Project Ekle... öğesiniseçin. Genel BoşSınıf'ıseçin, Ad alanına girin ve Yeni düğmesine tıklayın:
Dosyayı Product.cs aşağıdaki gibi yapın:
using System;
using Foundation;
using System.Collections.Generic;
namespace MacOutlines
{
public class Product : NSObject
{
#region Public Variables
public List<Product> Products = new List<Product>();
#endregion
#region Computed Properties
public string Title { get; set;} = "";
public string Description { get; set;} = "";
public bool IsProductGroup {
get { return (Products.Count > 0); }
}
#endregion
#region Constructors
public Product ()
{
}
public Product (string title, string description)
{
this.Title = title;
this.Description = description;
}
#endregion
}
}
Ardından, istenen ana hat için verileri NSOutlineDataSource sağlamak için bir alt sınıfı oluşturmamız gerekir. Dosya Çözüm Gezginisağ tıklayın ve yeni Project Ekle... öğesini seçin. Genel BoşSınıf'ıseçin, Ad alanına girin ve Yeni düğmesine tıklayın.
Dosyasını ProductTableDataSource.cs düzenleyin ve aşağıdakine benzer şekilde düzenleyin:
using System;
using AppKit;
using CoreGraphics;
using Foundation;
using System.Collections;
using System.Collections.Generic;
namespace MacOutlines
{
public class ProductOutlineDataSource : NSOutlineViewDataSource
{
#region Public Variables
public List<Product> Products = new List<Product>();
#endregion
#region Constructors
public ProductOutlineDataSource ()
{
}
#endregion
#region Override Methods
public override nint GetChildrenCount (NSOutlineView outlineView, NSObject item)
{
if (item == null) {
return Products.Count;
} else {
return ((Product)item).Products.Count;
}
}
public override NSObject GetChild (NSOutlineView outlineView, nint childIndex, NSObject item)
{
if (item == null) {
return Products [childIndex];
} else {
return ((Product)item).Products [childIndex];
}
}
public override bool ItemExpandable (NSOutlineView outlineView, NSObject item)
{
if (item == null) {
return Products [0].IsProductGroup;
} else {
return ((Product)item).IsProductGroup;
}
}
#endregion
}
}
Bu sınıf, Ana Hat Görünümü'mizin öğeleri için depolama alanına sahiptir ve tablodaki satır sayısını iade etmek GetChildrenCount için 'i geçersiz kılar. , belirli bir üst veya alt öğeyi (Ana Hat Görünümü tarafından istenen şekilde) döndürür ve belirtilen öğeyi üst veya GetChildItemExpandable alt öğe olarak tanımlar.
Son olarak, ana hatlarımızın davranışını sağlamak NSOutlineDelegate için bir alt sınıfı oluşturmamız gerekir. Dosya Çözüm Gezginisağ tıklayın ve yeni Project Ekle... öğesini seçin. Genel BoşSınıf'ıseçin, Ad alanına girin ve Yeni düğmesine tıklayın.
Dosyasını ProductOutlineDelegate.cs düzenleyin ve aşağıdakine benzer şekilde düzenleyin:
using System;
using AppKit;
using CoreGraphics;
using Foundation;
using System.Collections;
using System.Collections.Generic;
namespace MacOutlines
{
public class ProductOutlineDelegate : NSOutlineViewDelegate
{
#region Constants
private const string CellIdentifier = "ProdCell";
#endregion
#region Private Variables
private ProductOutlineDataSource DataSource;
#endregion
#region Constructors
public ProductOutlineDelegate (ProductOutlineDataSource datasource)
{
this.DataSource = datasource;
}
#endregion
#region Override Methods
public override NSView GetView (NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item) {
// This pattern allows you reuse existing views when they are no-longer in use.
// If the returned view is null, you instance up a new view
// If a non-null view is returned, you modify it enough to reflect the new data
NSTextField view = (NSTextField)outlineView.MakeView (CellIdentifier, this);
if (view == null) {
view = new NSTextField ();
view.Identifier = CellIdentifier;
view.BackgroundColor = NSColor.Clear;
view.Bordered = false;
view.Selectable = false;
view.Editable = false;
}
// Cast item
var product = item as Product;
// Setup view based on the column selected
switch (tableColumn.Title) {
case "Product":
view.StringValue = product.Title;
break;
case "Details":
view.StringValue = product.Description;
break;
}
return view;
}
#endregion
}
}
bir örneği ProductOutlineDelegate oluşturduklarında, ana hat için veri sağlayan bir örneğini de ProductOutlineDataSource iletiriz. yöntemi, GetView bir ver sütunu ve satırı için hücreyi görüntülemek için bir görünüm (veri) döndürerek sorumludur. Mümkünse, hücreyi görüntülemek için mevcut bir görünüm yeniden kullanılır, görüntülenmezse yeni bir görünüm oluşturulmalıdır.
Ana hat doldurmak için dosyasını düzenleyemez MainWindow.cs ve yönteminin aşağıdaki AwakeFromNib gibi bir görünüme bakabilirsiniz:
public override void AwakeFromNib ()
{
base.AwakeFromNib ();
// Create data source and populate
var DataSource = new ProductOutlineDataSource ();
var Vegetables = new Product ("Vegetables", "Greens and Other Produce");
Vegetables.Products.Add (new Product ("Cabbage", "Brassica oleracea - Leaves, axillary buds, stems, flowerheads"));
Vegetables.Products.Add (new Product ("Turnip", "Brassica rapa - Tubers, leaves"));
Vegetables.Products.Add (new Product ("Radish", "Raphanus sativus - Roots, leaves, seed pods, seed oil, sprouting"));
Vegetables.Products.Add (new Product ("Carrot", "Daucus carota - Root tubers"));
DataSource.Products.Add (Vegetables);
var Fruits = new Product ("Fruits", "Fruit is a part of a flowering plant that derives from specific tissues of the flower");
Fruits.Products.Add (new Product ("Grape", "True Berry"));
Fruits.Products.Add (new Product ("Cucumber", "Pepo"));
Fruits.Products.Add (new Product ("Orange", "Hesperidium"));
Fruits.Products.Add (new Product ("Blackberry", "Aggregate fruit"));
DataSource.Products.Add (Fruits);
var Meats = new Product ("Meats", "Lean Cuts");
Meats.Products.Add (new Product ("Beef", "Cow"));
Meats.Products.Add (new Product ("Pork", "Pig"));
Meats.Products.Add (new Product ("Veal", "Young Cow"));
DataSource.Products.Add (Meats);
// Populate the outline
ProductOutline.DataSource = DataSource;
ProductOutline.Delegate = new ProductOutlineDelegate (DataSource);
}
Uygulamayı çalıştıracaksanız aşağıdakiler görüntülenir:
Ana Hat Görünümünde bir düğümü genişletecek olursanız aşağıdaki gibi olur:
Sütuna Göre Sıralama
Şimdi kullanıcının bir Sütun Üst Bilgisi'ne tıklayarak ana hatdaki verileri sıralamasına izin ver. İlk olarak dosyaya çift Main.storyboard tıklar ve dosyayı dosyada düzenlemek Interface Builder. sütununu Product seçin, Title Sıralama Anahtarı için Productcompare: Seçici için girin Title Sipariş için Ascending öğesini compare:
Değişikliklerinizi kaydedin ve Xcode ile Mac için Visual Studio geri dön.
Şimdi dosyayı düzenleyemez ProductOutlineDataSource.cs ve aşağıdaki yöntemleri ekleyemezsiniz:
public void Sort(string key, bool ascending) {
// Take action based on key
switch (key) {
case "Title":
if (ascending) {
Products.Sort ((x, y) => x.Title.CompareTo (y.Title));
} else {
Products.Sort ((x, y) => -1 * x.Title.CompareTo (y.Title));
}
break;
}
}
public override void SortDescriptorsChanged (NSOutlineView outlineView, NSSortDescriptor[] oldDescriptors)
{
// Sort the data
Sort (oldDescriptors [0].Key, oldDescriptors [0].Ascending);
outlineView.ReloadData ();
}
yöntemi, Veri Kaynağı'daki verileri belirli bir sınıf alanına göre artan veya SortProduct azalan düzende sıralamamıza olanak sağlar. Geçersiz kılınan SortDescriptorsChanged yöntem, kullanım sütun başlığına her tıkladığında çağrılır. Bu değer, Interface Builder için Interface Builder sıralama düzenine geçiri.
Uygulamayı çalıştırarak Sütun Üst Bilgileri'ne tıklarsanız satırlar o sütuna göre sıralanır:
Satır Seçimi
Kullanıcının tek bir satır seçmesine izin vermek için dosyaya çift tıklar ve bu satırda düzenleme Main.storyboard için Interface Builder. Arabirim Hiyerarşisinde Ana Hat Görünümü'ne tıklayın ve Öznitelik Denetçisi'nin Birden Çok onay kutusunun işaretini kaldırın:
Değişikliklerinizi kaydedin ve Xcode ile Mac için Visual Studio geri dön.
Ardından dosyasını düzenleyin ProductOutlineDelegate.cs ve aşağıdaki yöntemi ekleyin:
public override bool ShouldSelectItem (NSOutlineView outlineView, NSObject item)
{
// Don't select product groups
return !((Product)item).IsProductGroup;
}
Bu, kullanıcının Ana Hat Görünümü'ne tek bir satır seçmesine olanak sağlar. Kullanıcının herhangi bir öğeyi seçmesine izin ve ardından, kullanıcının herhangi bir öğeyi seçmesine izin ve ardından her öğe için öğesini falseShouldSelectItem geri false girin.
Birden Çok Satır Seçimi
Kullanıcının birden çok satır seçmesine izin vermek için dosyaya çift tıklar ve bu satırda düzenlemek Main.storyboard Interface Builder. Arabirim Hiyerarşisinde Ana Hat Görünümünü seçin ve Öznitelik Denetçisi'nin Birden Çok onay kutusunu işaretleyin:
Değişikliklerinizi kaydedin ve Xcode ile Mac için Visual Studio geri dön.
Ardından dosyasını düzenleyin ProductOutlineDelegate.cs ve aşağıdaki yöntemi ekleyin:
public override bool ShouldSelectItem (NSOutlineView outlineView, NSObject item)
{
// Don't select product groups
return !((Product)item).IsProductGroup;
}
Bu, kullanıcının Ana Hat Görünümü'ne tek bir satır seçmesine olanak sağlar. Kullanıcının herhangi bir öğeyi seçmesine izin ve ardından, kullanıcının herhangi bir öğeyi seçmesine izin ve ardından her öğe için öğesini falseShouldSelectRow geri false girin.
Satır Seçmek için Yazın
Kullanıcının Ana Hat Görünümü seçiliyken bir karakter yazmasına ve bu karaktere sahip olan ilk satırı seçmesine izin vermek için dosyaya çift tıklar ve dosyada düzenleme için Main.storyboard Interface Builder. Arabirim Hiyerarşisinde Ana Hat Görünümünü seçin ve Öznitelik Denetçisi'nin Tür Seçimi onay kutusunu işaretleyin:
Değişikliklerinizi kaydedin ve Xcode ile Mac için Visual Studio geri dön.
Şimdi dosyayı düzenleyemez ProductOutlineDelegate.cs ve aşağıdaki yöntemi ekleriz:
public override NSObject GetNextTypeSelectMatch (NSOutlineView outlineView, NSObject startItem, NSObject endItem, string searchString)
{
foreach(Product product in DataSource.Products) {
if (product.Title.Contains (searchString)) {
return product;
}
}
// Not found
return null;
}
yöntemi GetNextTypeSelectMatch verilen öğesini alır ve içinde bu searchStringProduct dizeyi içeren ilk öğenin öğesini Title döndürür.
Sütunları Yeniden Sıralama
Kullanıcının Ana Hat Görünümü'ne sütunları yeniden sıralamasını sürüklemesine izin vermek için dosyaya çift tıklar ve dosyayı düzenleme için Main.storyboard Interface Builder. Arabirim Hiyerarşisinde Ana Hat Görünümünü seçin ve Öznitelik Denetçisi'nin Yeniden Sıralama onay kutusunu işaretleyin:
Otomatik Kaydetme özelliği için bir değer verir ve Sütun Bilgileri alanını kontrol ederse, tablonun düzeninde yapılan tüm değişiklikler bizim için otomatik olarak kaydedilir ve uygulama bir sonraki çalıştırılırken geri yüklenir.
Değişikliklerinizi kaydedin ve Xcode ile Mac için Visual Studio geri dön.
Şimdi dosyayı düzenleyemez ProductOutlineDelegate.cs ve aşağıdaki yöntemi ekleriz:
public override bool ShouldReorder (NSOutlineView outlineView, nint columnIndex, nint newColumnIndex)
{
return true;
}
yöntemi, ShouldReorder yeniden true sıralandırarak içine sürüklemesine izin vermek istediğiniz herhangi bir sütun için , else newColumnIndex return ; false
Uygulamayı çalıştıracak olursanız sütunlarımızı yeniden sıralamak için Sütun Üst Bilgilerini sürükleyebilirsiniz:
Hücreleri Düzenleme
Kullanıcının belirli bir hücrenin değerlerini düzenlemesine izin vermek için dosyasını düzenleyin ProductOutlineDelegate.cs ve yöntemini aşağıdaki gibi GetViewForItem değiştirin:
public override NSView GetView (NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item) {
// Cast item
var product = item as Product;
// This pattern allows you reuse existing views when they are no-longer in use.
// If the returned view is null, you instance up a new view
// If a non-null view is returned, you modify it enough to reflect the new data
NSTextField view = (NSTextField)outlineView.MakeView (tableColumn.Title, this);
if (view == null) {
view = new NSTextField ();
view.Identifier = tableColumn.Title;
view.BackgroundColor = NSColor.Clear;
view.Bordered = false;
view.Selectable = false;
view.Editable = !product.IsProductGroup;
}
// Tag view
view.Tag = outlineView.RowForItem (item);
// Allow for edit
view.EditingEnded += (sender, e) => {
// Grab product
var prod = outlineView.ItemAtRow(view.Tag) as Product;
// Take action based on type
switch(view.Identifier) {
case "Product":
prod.Title = view.StringValue;
break;
case "Details":
prod.Description = view.StringValue;
break;
}
};
// Setup view based on the column selected
switch (tableColumn.Title) {
case "Product":
view.StringValue = product.Title;
break;
case "Details":
view.StringValue = product.Description;
break;
}
return view;
}
Şimdi uygulamayı çalıştıracak olursanız kullanıcı Tablo Görünümündeki hücreleri düzenleyebilir:
Ana Hat Görünümlerde Görüntüleri Kullanma
Bir görüntüyü hücrenin bir parçası olarak dahil etmek için, verilerin Ana Hat Görünümü'nin yöntemi tarafından döndürül yöntemini normal yerine kullanmak üzere NSOutlineViewNSTableViewDelegate'sGetViewNSTableCellView değiştirmeniz NSTextField gerekir. Örnek:
public override NSView GetView (NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item) {
// Cast item
var product = item as Product;
// This pattern allows you reuse existing views when they are no-longer in use.
// If the returned view is null, you instance up a new view
// If a non-null view is returned, you modify it enough to reflect the new data
NSTableCellView view = (NSTableCellView)outlineView.MakeView (tableColumn.Title, this);
if (view == null) {
view = new NSTableCellView ();
if (tableColumn.Title == "Product") {
view.ImageView = new NSImageView (new CGRect (0, 0, 16, 16));
view.AddSubview (view.ImageView);
view.TextField = new NSTextField (new CGRect (20, 0, 400, 16));
} else {
view.TextField = new NSTextField (new CGRect (0, 0, 400, 16));
}
view.TextField.AutoresizingMask = NSViewResizingMask.WidthSizable;
view.AddSubview (view.TextField);
view.Identifier = tableColumn.Title;
view.TextField.BackgroundColor = NSColor.Clear;
view.TextField.Bordered = false;
view.TextField.Selectable = false;
view.TextField.Editable = !product.IsProductGroup;
}
// Tag view
view.TextField.Tag = outlineView.RowForItem (item);
// Allow for edit
view.TextField.EditingEnded += (sender, e) => {
// Grab product
var prod = outlineView.ItemAtRow(view.Tag) as Product;
// Take action based on type
switch(view.Identifier) {
case "Product":
prod.Title = view.TextField.StringValue;
break;
case "Details":
prod.Description = view.TextField.StringValue;
break;
}
};
// Setup view based on the column selected
switch (tableColumn.Title) {
case "Product":
view.ImageView.Image = NSImage.ImageNamed (product.IsProductGroup ? "tags.png" : "tag.png");
view.TextField.StringValue = product.Title;
break;
case "Details":
view.TextField.StringValue = product.Description;
break;
}
return view;
}
Daha fazla bilgi için Lütfen Görüntüyle Çalışma belgelerimizin Ana Hat Görünümleri ile Görüntüleri Kullanma bölümüne bakın.
Veri Bağlama Ana Hat Görünümleri
Xamarin.Mac uygulamanıza Key-Value Kodlama ve Veri Bağlama tekniklerini kullanarak kullanıcı arabirimi öğelerini doldurmak ve bu öğelerle çalışmak için yazmanız ve sürdürmeniz gereken kod miktarını önemli ölçüde azaltabilirsiniz. Ayrıca, arka uç verilerinizi(Veri Modeli ) ön uç Kullanıcı Arabirimi (Model-View-Controller)daha kolay ve daha esnek bir uygulama tasarımına neden olacak şekilde daha fazla şekilde aynabileceksiniz.
Key-Value Kodlama (KVC), örnek değişkenleri veya erişimci yöntemleri ( ) aracılığıyla erişmek yerine özellikleri tanımlamak için anahtarları (özel olarak biçimlendirilmiş dizeler) kullanarak nesnenin özelliklerine dolaylı olarak erişmeye yönelik bir get/set mekanizmadır. Xamarin.Mac uygulamanıza Key-Value Kodlama uyumlu erişimcileri uygulayarak, Key-Value Observing (KVO), Data Binding, Core Data, Cocoa bağlamaları ve betiklenebilirlik gibi diğer macOS özelliklerine erişebilirsiniz.
Daha fazla bilgi için lütfen veri bağlamamız ve Key-Value kodlama belgelerinin anahat görünümü veri bağlama bölümüne bakın.
Özet
Bu makalede, bir Xamarin. Mac uygulamasındaki ana hat görünümleriyle çalışmaya ilişkin ayrıntılı bir bakış ele alınmıştır. Ana hat görünümlerinin farklı türlerini ve kullanımlarını, Xcode 'un Interface Builder anahat görünümleri oluşturmayı ve bakımını ve C# kodunda ana hat görünümleriyle çalışmayı gördük.






















