Aracılığıyla paylaş


Xamarin'de watchOS Tablo Denetimleri

watchOS WKInterfaceTable denetimi, iOS'a kıyasla çok daha basittir, ancak benzer bir rol gerçekleştirir. Özel düzenlere sahip olabilecek ve dokunma olaylarına yanıt veren satırların kaydırma listesini oluşturur.

Tablo listesini izleme Tablo ayrıntısı izleme

Tablo Ekleme

Tablo denetimini bir görünüme sürükleyin. Varsayılan olarak şöyle görünür (belirtilmemiş tek bir satır düzeni gösterilir):

Tablo ekleme

Kodda başvurulabilmesi için, Özellikler panelinin Ad kutusunda tabloya bir ad verin.

Satır Denetleyicisi Ekleme

Tablo, varsayılan olarak Grup denetimi içeren bir satır denetleyicisiyle temsil edilen tek bir satırı otomatik olarak içerir.

Satır denetleyicisinin Sınıfını ayarlamak için Belge Anahattı'ndaki satırı seçin ve Özellikler bölmesine bir sınıf adı yazın:

Özellikler bölmesine sınıf adı girme

Satırın denetleyicisinin sınıfı ayarlandıktan sonra IDE, projede karşılık gelen bir C# dosyası oluşturur. Denetimleri (etiketler gibi) satıra sürükleyin ve kodda başvurulabilmeleri için onlara ad verin.

Satır Oluşturma ve Doldurma

SetNumberOfRows , doğru satırı seçmek için öğesini kullanarak Identifier her satır için satır denetleyicisi sınıflarını oluşturur. Satır denetleyicinize özel Identifierbir değer verdiyseniz, aşağıdaki kod parçacığındaki varsayılan değeri kullandığınız tanımlayıcıyla değiştirin. RowControllerHer satır için, çağrıldığında SetNumberOfRows ve tablo görüntülendiğinde oluşturulur.

myTable.SetNumberOfRows ((nint)rows.Count, "default");
    // loads row controller by identifier

Önemli

Tablo satırları iOS'taki gibi sanallaştırılmaz. Satır sayısını sınırlamaya çalışın (Apple 20'den azını önerir).

Satırlar oluşturulduktan sonra her hücreyi doldurmanız gerekir (iOS'ta olduğu gibi GetCell ). Bu kod parçacığı her satırdaki etiketi güncelleştirir:

for (var i = 0; i < rows.Count; i++) {
    var elementRow = (RowController)myTable.GetRowController (i);
    elementRow.myRowLabel.SetText (rows [i]);
}

Önemli

kullanmak SetNumberOfRows ve ardından kullanarak GetRowController döngü yapmak tablonun tamamının saatine gönderilmesine neden olur. Tablonun sonraki görünümlerinde, belirli satırları eklemeniz veya kaldırmanız gerekiyorsa ve RemoveRowsAt daha iyi performans için kullanınInsertRowsAt.

Dokunmaları Yanıtlama

Satır seçimine iki farklı şekilde yanıt vekleyebilirsiniz:

  • DidSelectRow yöntemini arabirim denetleyicisinde uygulayın veya
  • görsel taslakta bir segue oluşturun ve satır seçiminin başka bir sahne açmasını istiyorsanız uygulayın GetContextForSegue .

DidSelectRow

Satır seçimini program aracılığıyla işlemek için yöntemini uygulayın DidSelectRow . Yeni bir sahne açmak için sahnenin tanımlayıcısını ve kullanılacak veri bağlamını kullanın PushController ve geçirin:

public override void DidSelectRow (WKInterfaceTable table, nint rowIndex)
{
    var rowData = rows [(int)rowIndex];
    Console.WriteLine ("Row selected:" + rowData);
    // if selection should open a new scene
    PushController ("secondInterface", rows[(int)rowIndex]);
}

GetContextForSegue

Görsel taslak üzerindeki bir segue'yi tablo satırınızdan başka bir görünüme sürükleyin (sürüklerken Control tuşunu basılı tutun). Segue öğesini seçtiğinizden ve Özellikler panelinde (aşağıdaki örnekte olduğu gibisecondLevel) bir tanımlayıcı verdiğinizden emin olun.

Arabirim denetleyicisinde yöntemini uygulayın GetContextForSegue ve segue tarafından sunulan görünüme sağlanması gereken veri bağlamını döndürür.

public override NSObject GetContextForSegue (string segueIdentifier, WKInterfaceTable table, nint rowIndex)
{
    if (segueIdentifier == "secondLevel") {
        return new NSString (rows[(int)rowIndex]);
    }
    return null;
}

Bu veriler yönteminde hedef görsel taslak görünümüne Awake geçirilir.

Birden Çok Satır Türü

Varsayılan olarak, tablo denetiminin tasarlayabileceğiniz tek bir satır türü vardır. Daha fazla 'şablon' satırı eklemek için Özellikler panelindeki Satırlar kutusunu kullanarak daha fazla satır denetleyicisi oluşturun:

Prototip satır sayısını ayarlama

Rows özelliğini 3 olarak ayarlamak, denetimleri içine sürüklemeniz için ek satır yer tutucuları oluşturur. Her satır için, satır denetleyicisi sınıfının oluşturulduğundan emin olmak için Özellikler panelinde Sınıf adını ayarlayın.

Tasarımcıdaki prototip satırları

Tabloyu farklı satır türleriyle doldurmak için yöntemini kullanarak SetRowTypes tablodaki her satır için kullanılacak satır denetleyicisi türünü belirtin. Her satır için hangi satır denetleyicisinin kullanılacağını belirtmek için satırın tanımlayıcılarını kullanın.

Bu dizideki öğe sayısı, tabloda olmasını beklediğiniz satır sayısıyla eşleşmelidir:

myTable.SetRowTypes (new [] {"type1", "default", "default", "type2", "default"});

Bir tabloyu birden çok satır denetleyicisiyle doldururken, kullanıcı arabirimini doldururken beklediğiniz türü izlemeniz gerekir:

for (var i = 0; i < rows.Count; i++) {
    if (i == 0) {
        var elementRow = (Type1RowController)myTable.GetRowController (i);
        // populate UI controls
    } else if (i == 3) {
        var elementRow = (Type2RowController)myTable.GetRowController (i);
        // populate UI controls
    } else {
        var elementRow = (DefaultRowController)myTable.GetRowController (i);
        // populate UI controls
    }
}

Dikey Ayrıntı Sayfalaması

watchOS 3, tablolar için yeni bir özellik kullanıma sunulmuştur: tabloya geri dönüp başka bir satır seçmek zorunda kalmadan her satırla ilgili ayrıntı sayfalarında gezinme özelliği. Ayrıntı ekranları yukarı ve aşağı çekilerek veya Digital Crown kullanılarak kaydırılabilir.

Dikey Ayrıntı Sayfalama örneği Dikey sayfalama ayrıntısı

Önemli

Bu özellik şu anda yalnızca Xcode Interface Builder'da görsel taslak düzenlenerek kullanılabilir.

Bu özelliği etkinleştirmek için tasarım yüzeyinde öğesini WKInterfaceTable seçin ve Dikey Ayrıntı Sayfalama seçeneğini işaretleyin:

Dikey Ayrıntı Sayfalama seçeneğini belirleme

Apple tarafından açıklandığı gibi, sayfalama özelliğinin çalışması için tablo gezintisinin segue'leri kullanması gerekir. Bunun yerine segue'leri kullanmak için kullanan PushController mevcut tüm kodları yeniden yazın.

Ek: Satır Denetleyicisi Kodu Örneği

Tasarımcıda bir satır denetleyicisi oluşturulduğunda IDE otomatik olarak iki kod dosyası oluşturur. Bu oluşturulan dosyalardaki kod, başvuru için aşağıda gösterilmiştir.

İlki sınıfı için adlandırılır, örneğin RowController.cs, örneğin:

using System;
using Foundation;

namespace WatchTablesExtension
{
    public partial class RowController : NSObject
    {
        public RowController ()
        {
        }
    }
}

Diğer .designer.cs dosyası, tasarımcı yüzeyinde oluşturulan çıkışları ve eylemleri içeren kısmi bir sınıf tanımıdır; örneğin, tek bir WKInterfaceLabel denetime sahip bu örnek:

using Foundation;
using System;
using System.CodeDom.Compiler;
using UIKit;

namespace WatchTables.OnWatchExtension
{
    [Register ("RowController")]
    partial class RowController
    {
        [Outlet]
        [GeneratedCode ("iOS Designer", "1.0")]
        public WatchKit.WKInterfaceLabel MyLabel { get; set; }

        void ReleaseDesignerOutlets ()
        {
            if (MyLabel != null) {
                MyLabel.Dispose ();
                MyLabel = null;
            }
        }
    }
}

Burada bildirilen çıkışlara ve eylemlere kodda başvurulabilir; ancak .designer.cs dosyası doğrudan DÜZENLENMEMESİ gerekir.