Comment appliquer un menu contextuel pour SwiftUI ligne de la Table?

0

La question

J'ai trouvé que le nouveau composant de tableau de SwiftUI 3.0 est comme un jouet, qui peut être utilisé facilement, mais il est difficile de développer plus de fonctions.

TableRow et TableColumn hériter de la valeur de l'objet. Comment puis-je obtenir le point de vue d'une ligne? Je veux mettre un autre ContextMenu pour chaque ligne. En outre, je tiens à mettre le ContextMenu pour l'en-tête de colonne.

Comment mettre en œuvre sur la base de composant de Tableau? Je ne veux pas utiliser le composant de Liste.

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

La meilleure réponse

0

Afin d'avoir contextMenu de travail sur SwiftUI 3.0 Tableau, il est nécessaire de l'ajouter à chaque TableColumn élément. De Plus, si vous souhaitez ajouter Double Tap soutien, il est nécessaire de l'ajouter de façon indépendante aussi.

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

Merci pour votre réponse, mais cette mise en œuvre ne peut travailler sur le contenu de la cellule, ne peut pas couvrir complètement le contenu de l'ensemble de la ligne, et ne prendra pas effet pour la partie vide de la ligne.
user1397892

Dans d'autres langues

Cette page est dans d'autres langues

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