共用方式為


Xamarin 中的 watchOS 表格控件

watchOS WKInterfaceTable 控制項比其 iOS 控制件簡單得多,但會執行類似的角色。 它會建立可具有自定義版面配置的數據列卷動清單,以及回應觸控事件。

監看表清單 監看表格詳細數據

新增數據表

數據表 控件拖曳至場景。 根據預設,它看起來會像這樣(顯示單一未指定的數據列配置):

新增數據表

在 [屬性] 面板的 [名稱] 方塊中為數據表指定名稱,以便在程式代碼中參考它。

新增數據列控制器

數據表會自動包含單一數據列,由預設包含 群組 控件的數據列控制器表示。

若要設定資料列控制器的類別,請選取 [檔案大綱] 中的數據列,然後在 [屬性] 面板中輸入類別名稱:

在 Properties pad 中輸入類別名稱

設定數據列控制器的 類別之後,IDE 會在專案中建立對應的 C# 檔案。 將控件(例如標籤)拖曳到數據列,併為其命名,以便在程式代碼中參考它們。

建立和填入數據列

SetNumberOfRows 使用 Identifier 來選取正確的數據列,為每個數據列建立數據列控制器類別。 如果您為資料列控制器提供自定義 Identifier,請將下列代碼段中的預設值變更為您所使用的識別碼。 RowController呼叫 時SetNumberOfRows會建立每個數據列的 ,並顯示數據表。

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

重要

數據表數據列不會像在iOS中一樣虛擬化。 嘗試限制數據列數目(Apple 建議小於 20 個)。

建立數據列之後,您必須填入每個數據格(就像在 iOS 中所做的一樣 GetCell )。 此代碼段會更新每個資料列中的標籤:

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

重要

使用 SetNumberOfRows ,然後迴圈 GetRowController 使用 會導致整個數據表傳送至監看式。 在數據表的後續檢視中,如果您需要新增或移除特定數據列的使用 InsertRowsAt ,並 RemoveRowsAt 提升效能。

回應點選

您可以透過不同的方式回應資料列選取:

  • DidSelectRow 介面控制器上實作 方法,或
  • 如果您要開啟另一個場景,請在分鏡腳本上建立segue並實 GetContextForSegue 作 。

DidSelectRow

若要以程式設計方式處理數據列選取,請實作 DidSelectRow 方法。 若要開啟新的場景,請使用 PushController 並傳遞場景的標識碼和數據內容,以使用:

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

將分鏡腳本上的 Segue 從表格列拖曳到另一個場景(拖曳時按住 Control 鍵)。 請務必選取 segue,並在 [屬性] 面板中為其指定標識碼(如secondLevel下列範例所示)。

在介面控制器中,實 GetContextForSegue 作 方法,並傳回應該提供給 segue 所呈現場景的數據內容。

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

此數據會在其方法中 Awake 傳遞至目標分鏡腳本場景。

多個數據列類型

根據預設,數據表控件具有您可以設計的單一數據列類型。 若要新增更多數據列 'templates',請使用 [屬性] 板中的 [數據列] 方塊來建立更多數據列控制器:

設定原型數據列的數目

將 Rows 屬性設定為 3 會為您建立額外的數據列佔位元元,讓您將控制件拖曳至 。 針對每個數據列,在 Properties pad 中設定類別名稱,以確保已建立數據列控制器類別。

設計工具中的原型數據列

若要以不同的數據列類型填入數據表, SetRowTypes 請使用 方法來指定要用於數據表中每個數據列的數據列控制器類型。 使用數據列的識別碼來指定每個數據列應該使用哪個數據列控制器。

此陣列中的元素數目應該符合您預期在資料表中的數據列數目:

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

使用多個資料列控制器填入資料表時,您必須追蹤您在填入 UI 時預期的類型:

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
    }
}

垂直詳細數據分頁

watchOS 3 引進了數據表的新功能:能夠捲動與每個數據列相關的詳細數據頁,而不需要返回數據表並選擇另一個數據列。 詳細數據畫面可以向上和向下卷動,或使用數位皇冠來捲動。

垂直詳細數據分頁範例 垂直分頁詳細數據

重要

此功能目前只能透過在 Xcode Interface Builder 中編輯分鏡腳本來使用。

若要啟用此功能,請選取 WKInterfaceTable 設計介面上的 ,然後勾選 [垂直詳細數據分頁 ] 選項:

選取 [垂直詳細數據分頁] 選項

Apple 所說明,數據表導覽必須使用 Segue 來提供分頁功能才能運作。 請改寫任何使用 PushController segue 的現有程式代碼。

附錄:數據列控制器程式代碼範例

當設計工具中建立數據列控制器時,IDE 會自動建立兩個程式代碼檔案。 這些產生的檔案中的程序代碼如下所示以供參考。

第一個會針對 類別命名,例如 RowController.cs,如下所示:

using System;
using Foundation;

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

另一 個.designer.cs 檔案是一個部分類別定義,其中包含在設計工具介面上建立的輸出和動作,例如此範例搭配一個 WKInterfaceLabel 控件:

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;
            }
        }
    }
}

然後,您可以在程式代碼中參考此處宣告的輸出和動作,不過 不應該直接編輯.designer.cs 檔案。