Come applicare un menu di contesto per SwiftUI riga della Tabella?

0

Domanda

Ho scoperto che il nuovo componente della tabella di SwiftUI 3.0 è come un giocattolo, che può essere facilmente utilizzato, ma è difficile per espandere le funzioni.

TableRow e TableColumn ereditate dal valore dell'oggetto. Come posso ottenere la visualizzazione di una riga? Voglio impostare un ContextMenu per ogni riga. Inoltre, voglio impostare il ContextMenu per l'intestazione di colonna.

Come implementare sulla base del componente della Tabella? Non voglio usare il componente List.

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

Migliore risposta

0

Per avere contextMenu lavorando SwiftUI 3.0 Tabella è necessario aggiungere ad ogni TableColumn voce. Inoltre, se si desidera aggiungere Double Tap il supporto è necessario aggiungere in maniera indipendente anche.

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

Ti ringrazio per la risposta, ma questa implementazione può lavorare solo sul contenuto della cella, non può coprire completamente il contenuto di tutta la linea, e non avrà effetto per la parte vuota della riga.
user1397892

In altre lingue

Questa pagina è in altre lingue

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