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.
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):
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:
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 RowController
zavolá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í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ů.
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.
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í :
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.