Sdílet prostřednictvím


Ovládací prvky tabulky watchOS v Xamarinu

Ovládací prvek watchOS WKInterfaceTable je mnohem jednodušší než jeho protějšk pro iOS, ale provádí podobnou roli. Vytvoří posuvný seznam řádků, které můžou mít vlastní rozložení a které reagují na dotykové události.

Seznam tabulek kukátku Sledování podrobností tabulky

Přidání tabulky

Přetáhněte ovládací prvek Tabulka do scény. Ve výchozím nastavení bude vypadat takto (zobrazuje jedno nezadané rozložení řádku):

Přidání tabulky

Pojmenujte tabulku v poli Název na panelu Vlastnosti, aby bylo možné na ni odkazovat v kódu.

Přidání kontroleru řádků

Tabulka automaticky obsahuje jeden řádek reprezentovaný kontrolerem řádku, který ve výchozím nastavení obsahuje ovládací prvek Skupina .

Pokud chcete nastavit třídu pro řadič řádku, vyberte řádek v osnově dokumentu a do oblasti Vlastnosti zadejte název třídy:

Zadání názvu třídy do oblasti Vlastnosti

Jakmile je třída pro kontroler řádku nastavená, integrované vývojové prostředí (IDE) vytvoří v projektu odpovídající soubor C#. Přetáhněte ovládací prvky (například popisky) na řádek a pojmenujte je, aby se daly odkazovat v kódu.

Vytvoření a naplnění řádků

SetNumberOfRows vytvoří třídy kontroleru řádků pro každý řádek pomocí Identifier výběru správné třídy kontroleru řádků. Pokud jste řadiči řádku dali vlastní Identifier, změňte výchozí hodnotu v následujícím fragmentu kódu na identifikátor, který jste použili. Při RowControllerzavolání se vytvoří SetNumberOfRows každý řádek a zobrazí se tabulka.

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

Důležité

Řádky tabulky nejsou virtualizované, jako jsou v iOSu. Zkuste omezit počet řádků (Apple doporučuje méně než 20).

Po vytvoření řádků je potřeba naplnit každou buňku (třeba GetCell v iOSu). Tento fragment kódu aktualizuje popisek v každém řádku:

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

Důležité

Použití SetNumberOfRows a následné procházení pomocí použití GetRowController způsobí, že se do hodinek odešle celá tabulka. Pokud v následných zobrazeních tabulky potřebujete přidat nebo odebrat konkrétní řádky, použijte InsertRowsAt a RemoveRowsAt pro zajištění lepšího výkonu.

Reakce na klepnutí

Na výběr řádku můžete odpovědět dvěma různými způsoby:

  • implementujte metodu DidSelectRow na kontroleru rozhraní, nebo
  • vytvořte na scénářigue a implementujte GetContextForSegue , pokud chcete, aby výběr řádku otevřel jinou scénu.

DidSelectRow

Pokud chcete zpracovat výběr řádků prostřednictvím kódu programu, implementujte metodu DidSelectRow . Pokud chcete otevřít novou scénu, použijte PushController a předejte identifikátor scény a kontext dat, který chcete použít:

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

Přetáhněte gue na storyboard z řádku tabulky do jiné scény (podržte stisknutou klávesu Control při přetahování). Nezapomeňte vybrat gue a dát mu identifikátor na panelu Vlastnosti (například secondLevel v příkladu níže).

V kontroleru rozhraní implementujte metodu GetContextForSegue a vraťte kontext dat, který by měl být poskytnut scéně, která je prezentována segue.

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

Tato data se předávají cílové scéně scénáře ve své Awake metodě.

Více typů řádků

Ve výchozím nastavení má ovládací prvek tabulka jeden typ řádku, který můžete navrhnout. Pokud chcete přidat další řádek "templates", použijte pole Řádky na panelu Vlastnosti a vytvořte další kontrolery řádků:

Nastavení počtu prototypů řádků

Nastavením vlastnosti Řádky na hodnotu 3 vytvoříte další zástupné symboly řádků, do které můžete přetáhnout ovládací prvky. Pro každý řádek nastavte název třídy na panelu Vlastnosti , aby se zajistilo vytvoření třídy kontroleru řádků.

Řádky prototypu v návrháři

Chcete-li naplnit tabulku různými typy řádků, použijte SetRowTypes metodu k určení typu kontroleru řádku, který se má použít pro každý řádek v tabulce. Pomocí identifikátorů řádku určete, který řadič řádku se má použít pro každý řádek.

Počet prvků v tomto poli by se měl shodovat s počtem řádků, které očekáváte v tabulce:

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

Při naplnění tabulky více řadiči řádků budete muset sledovat, jaký typ očekáváte při naplnění uživatelského rozhraní:

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

Stránkování svislých podrobností

WatchOS 3 zavedl novou funkci pro tabulky: možnost procházet stránky podrobností související s jednotlivými řádky, aniž byste se museli vrátit k tabulce a zvolit jiný řádek. Obrazovky s podrobnostmi se dají posouvat potažením prstem nahoru a dolů nebo pomocí digitální korunky.

Příklad stránkování svislých podrobností Svislé stránkování podrobností

Důležité

Tato funkce je aktuálně dostupná pouze úpravou scénáře v Tvůrci rozhraní Xcode.

Pokud chcete tuto funkci povolit, vyberte WKInterfaceTable na návrhové ploše a zaškrtněte možnost Svislé stránkování podrobností :

Výběr možnosti Svislé stránkování podrobností

Jak je vysvětleno společností Apple , musí navigace v tabulce používat pro fungování funkce stránkování. Znovu napište jakýkoli existující kód, který místo toho používá PushController k použití segues.

Příloha: Příklad kódu kontroleru řádků

Integrované vývojové prostředí (IDE) automaticky vytvoří dva soubory kódu při vytvoření kontroleru řádku v návrháři. Kód v těchto generovaných souborech je uveden níže pro referenci.

První bude mít název pro třídu, například RowController.cs, například takto:

using System;
using Foundation;

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

Druhý soubor .designer.cs je částečná definice třídy, která obsahuje výstupy a akce vytvořené na ploše návrháře, například tento příklad s jedním WKInterfaceLabel ovládacím prvku:

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

Výstupy a akce deklarované zde lze pak odkazovat v kódu - ale soubor .designer.cs by neměl být upravován přímo.