Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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ść RowControllerdla 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
DidSelectRowmetody 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.

