Cum să se aplice un meniu contextual pentru a SwiftUI rând de Tabel?

0

Problema

Am constatat că masa noua componenta a SwiftUI 3.0 este ca o jucărie, care pot fi utilizate cu ușurință, dar este dificil de a extinde mai multe funcții.

TableRow și TableColumn moșteni de la valoarea obiectului. Cum pot obține punctul de vedere al unui rând? Vreau să setați un alt ContextMenu pentru fiecare rând. În plus, vreau să setați ContextMenu pentru antetul de coloană.

Cum să-l pună în aplicare, pe baza de Tabel component? Nu vreau să folosesc Lista de componente.

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

Cel mai bun răspuns

0

În scopul de a avea contextMenu lucru pe SwiftUI 3.0 Masă este necesar să-l adăugați la fiecare TableColumn element. În Plus, dacă doriți să adăugați Double Tap sprijin este necesar să adăugați în mod individual.

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

Vă mulțumesc pentru răspunsul dumneavoastră, dar această punere în aplicare se poate lucra numai cu privire la conținutul de celule, nu poate acoperi complet conținutul de toată linia, și nu va avea efect pentru gol parte a liniei.
user1397892

În alte limbi

Această pagină este în alte limbi

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