Udostępnij za pośrednictwem


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.

Lista tabel do obejrzenia Obejrzyj szczegóły tabeli

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):

Dodawanie tabeli

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:

Wprowadzanie nazwy 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 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:

Ustawianie liczby wierszy prototypu

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.

Prototypowe wiersze w projektancie

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.

Przykład stronicowania szczegółów pionowych Szczegóły stronicowania w pionie

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:

Wybieranie opcji stronicowania 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.