Jak zastosować menu kontekstowe do wiersza tabeli SwiftUI?

0

Pytanie

Odkryłem, że nowy komponent tabeli SwiftUI 3.0 wygląda na zabawkę, którą można łatwo wykorzystać, ale trudno poszerzyć dodatkowe funkcje.

TableRow i TableColumn są dziedziczone od obiektu value. Jak mogę uzyskać wgląd w wierszu? Chcę zainstalować inny kontekst dla każdego wiersza. Poza tym, chciałabym zapytać kontekst dla nagłówka kolumny.

Jak to zrealizować w oparciu o tabelarycznego składnika? Nie chcę używać składnik listy.

struct Person: Identifiable {

let givenName: String

let familyName: String

let id = UUID()

}

@State private var people = [

Person(givenName: "Juan", familyName: "Chavez"),

Person(givenName: "Mei", familyName: "Chen"),

Person(givenName: "Tom", familyName: "Clark"),

Person(givenName: "Gita", familyName: "Kumar"),

]

@State private var sortOrder = [KeyPathComparator(\Person.givenName)]

var body: some View {

Table(people, sortOrder: $sortOrder) {

TableColumn("Given Name", value: \.givenName)

TableColumn("Family Name", value: \.familyName)

}

.onChange(of: sortOrder) {

people.sort(using: $0)

}

}
contextmenu swiftui tablecolumn tablerow
2021-11-16 23:43:33
1

Najlepsza odpowiedź

0

Aby menu Kontekstowe pracował nad tabelą SwiftUI 3.0, należy go dodać w każdy element kolumny tabeli. Plus, jeśli chcesz dodać Double Tap wsparcie też trzeba dodać samodzielnie.

Table(documents, selection: $fileSelection) {
    TableColumn("File name") { item in
        Text(item.filename)
            .contextMenu { YOUR_CONTEXT_MENU }
            .simultaneousGesture(TapGesture(count: 1).onEnded { fileSelection = item.id })
            .simultaneousGesture(TapGesture(count: 2).onEnded { YOUR_DOUBLE_TAP_IMPLEMENTATION })
    }
    TableColumn("Size (MB)") { item in
        Text(item.size)
            .contextMenu { YOUR_CONTEXT_MENU }
            .simultaneousGesture(TapGesture(count: 1).onEnded { fileSelection = item.id })
            .simultaneousGesture(TapGesture(count: 2).onEnded { YOUR_DOUBLE_TAP_IMPLEMENTATION })
    }
}
2021-11-21 10:57:48

Dziękuję za odpowiedź, ale ta realizacja może pracować tylko z zawartością komórki, nie może w pełni obejmować zawartość całej linii i nie wejdzie w życie do pustej części wiersza.
user1397892

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................