kontrolki tabeli systemu watchOS na platformie Xamarin
Kontrolka systemu watchOS WKInterfaceTable
jest znacznie prostsza niż jej odpowiednik w systemie iOS, ale wykonuje podobną rolę. Tworzy listę przewijania wierszy, które mogą mieć niestandardowe układy i które reagują na zdarzenia dotykowe.
Dodawanie tabeli
Przeciągnij kontrolkę Tabela do sceny. Domyślnie będzie on wyglądać następująco (pokazujący pojedynczy nieokreślony układ wiersza):
Nadaj tabeli nazwę w polu Nazwa okienka właściwości, aby można było odwoływać się do niej w kodzie.
Dodawanie kontrolera wiersza
Tabela automatycznie zawiera pojedynczy wiersz reprezentowany przez kontroler wiersza, który domyślnie zawiera kontrolkę Grupa .
Aby ustawić klasę kontrolera wiersza, wybierz wiersz w konspekcie dokumentu i wpisz nazwę klasy w okienku Właściwości:
Po ustawieniu klasy dla kontrolera wiersza środowisko IDE utworzy odpowiedni plik języka C# w projekcie. Przeciągnij kontrolki (takie jak etykiety) do wiersza i nadaj im nazwy, aby można je było odwoływać w kodzie.
Tworzenie i wypełnianie wierszy
SetNumberOfRows
Tworzy klasy kontrolera wierszy dla każdego wiersza, używając elementu Identifier
, aby wybrać poprawną. Jeśli kontroler wiersza został podany jako niestandardowy Identifier
, zmień wartość domyślną w poniższym fragmencie kodu na użyty identyfikator. Wartość RowController
dla każdego wiersza jest tworzona, gdy SetNumberOfRows
jest wywoływana, a wyświetlana tabela.
myTable.SetNumberOfRows ((nint)rows.Count, "default");
// loads row controller by identifier
Ważne
Wiersze tabeli nie są zwirtualizowane, tak jak w systemie iOS. Spróbuj ograniczyć liczbę wierszy (firma Apple zaleca mniej niż 20).
Po utworzeniu wierszy należy wypełnić każdą komórkę (jak GetCell
w systemie iOS). Ten fragment kodu aktualizuje etykietę w każdym wierszu:
for (var i = 0; i < rows.Count; i++) {
var elementRow = (RowController)myTable.GetRowController (i);
elementRow.myRowLabel.SetText (rows [i]);
}
Ważne
Użycie SetNumberOfRows
metody , a następnie przejście w pętlę za pomocą GetRowController
powoduje wysłanie całej tabeli do zegarka. W kolejnych widokach tabeli, jeśli musisz dodać lub usunąć określone wiersze i InsertRowsAt
RemoveRowsAt
uzyskać lepszą wydajność.
Odpowiadanie na naciśnięcia
Wybór wiersza można reagować na dwa różne sposoby:
- implementowanie
DidSelectRow
metody na kontrolerze interfejsu lub - utwórz segue na scenorysie i zaimplementuj
GetContextForSegue
, jeśli chcesz, aby wybór wiersza otwierał inną scenę.
DidSelectRow
Aby programowo obsłużyć wybór wierszy, zaimplementuj metodę DidSelectRow
. Aby otworzyć nową scenę, użyj PushController
i przekaż identyfikator sceny oraz kontekst danych do użycia:
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
Przeciągnij segue na scenorys z wiersza tabeli do innej sceny (przytrzymaj Control podczas przeciągania).
Pamiętaj, aby wybrać segue i nadać mu identyfikator w okienku Właściwości (na przykład secondLevel
w poniższym przykładzie).
W kontrolerze interfejsu zaimplementuj metodę GetContextForSegue
i zwróć kontekst danych, który powinien zostać dostarczony do sceny prezentowanej przez segue.
public override NSObject GetContextForSegue (string segueIdentifier, WKInterfaceTable table, nint rowIndex)
{
if (segueIdentifier == "secondLevel") {
return new NSString (rows[(int)rowIndex]);
}
return null;
}
Te dane są przekazywane do docelowej sceny sceny w jej Awake
metodzie.
Wiele typów wierszy
Domyślnie kontrolka tabeli ma jeden typ wiersza, który można zaprojektować. Aby dodać więcej wierszy "templates", użyj pola Wiersze w okienku Właściwości , aby utworzyć więcej kontrolerów wierszy:
Ustawienie właściwości Wiersze na 3 spowoduje utworzenie dodatkowych symboli zastępczych wierszy do przeciągania kontrolek do. Dla każdego wiersza ustaw nazwę klasy w okienku Właściwości , aby upewnić się, że klasa kontrolera wierszy jest tworzona.
Aby wypełnić tabelę różnymi typami wierszy, użyj SetRowTypes
metody , aby określić typ kontrolera wierszy, który ma być używany dla każdego wiersza w tabeli. Użyj identyfikatorów wierszy, aby określić, który kontroler wierszy ma być używany dla każdego wiersza.
Liczba elementów w tej tablicy powinna być zgodna z liczbą wierszy, które powinny znajdować się w tabeli:
myTable.SetRowTypes (new [] {"type1", "default", "default", "type2", "default"});
Podczas wypełniania tabeli z wieloma kontrolerami wierszy należy śledzić oczekiwany typ podczas wypełniania interfejsu użytkownika:
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
}
}
Stronicowanie szczegółów pionowych
watchOS 3 wprowadził nową funkcję dla tabel: możliwość przewijania stron szczegółów powiązanych z każdym wierszem bez konieczności powrotu do tabeli i wybierania innego wiersza. Ekrany szczegółów można przewijać, przesuwając palcem w górę i w dół lub używając cyfrowej korony.
Ważne
Ta funkcja jest obecnie dostępna tylko przez edytowanie scenorysu w narzędziu Xcode Interface Builder.
Aby włączyć tę funkcję, wybierz ikonę WKInterfaceTable
na powierzchni projektowej i zaznacz opcję Stronicowanie szczegółów pionowych:
Zgodnie z wyjaśnieniem firmy Apple nawigacja w tabeli musi używać segues, aby funkcja stronicowania działała. Ponownie napisz dowolny istniejący kod używany PushController
do używania segues.
Dodatek: Przykład kodu kontrolera wiersza
Środowisko IDE automatycznie utworzy dwa pliki kodu po utworzeniu kontrolera wiersza w projektancie. Kod w tych wygenerowanych plikach jest pokazany poniżej, aby uzyskać odwołanie.
Pierwsza nazwa będzie mieć nazwę dla klasy, na przykład RowController.cs, w następujący sposób:
using System;
using Foundation;
namespace WatchTablesExtension
{
public partial class RowController : NSObject
{
public RowController ()
{
}
}
}
Drugi plik .designer.cs jest definicją klasy częściowej, która zawiera gniazda i akcje tworzone na powierzchni projektanta, takie jak w tym przykładzie z jedną WKInterfaceLabel
kontrolką:
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;
}
}
}
}
Zadeklarowane tutaj punkty i akcje mogą być następnie przywoływane w kodzie - jednak plik .designer.cs nie powinien być edytowany bezpośrednio.