Cómo aplicar un menú contextual para SwiftUI fila de la Tabla?

0

Pregunta

Me encontré con que el nuevo componente de tabla de SwiftUI 3.0 es como un juguete, que puede ser utilizado fácilmente, pero es difícil para ampliar más funciones.

TableRow y TableColumn heredar del objeto de valor. ¿Cómo puedo obtener el punto de vista de una fila? Quiero establecer diferentes ContextMenu para cada fila. Además, quiero establecer el ContextMenu para el encabezado de la columna.

Cómo ponerlo en práctica sobre la base de un componente de Tabla? No quiero utilizar la Lista de componentes.

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

Mejor respuesta

0

Con el fin de tener contextMenu trabajando en SwiftUI 3.0 Tabla es necesario agregar a cada TableColumn elemento. Además, si desea agregar Double Tap el apoyo es necesario añadir de forma independiente también.

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

Gracias por tu respuesta, pero esta aplicación sólo puede trabajar sobre el contenido de la celda, no puede cubrir completamente el contenido de toda la línea, y no entrará en vigor para la parte en blanco de la línea.
user1397892

En otros idiomas

Esta página está en otros idiomas

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