Como aplicar um menu de contexto para SwiftUI linha da Tabela?

0

Pergunta

Eu achei que a nova tabela de componentes de SwiftUI 3.0 é como um brinquedo, que pode ser facilmente utilizado, mas é difícil para expandir mais funções.

TableRow e TableColumn herdar do objecto de valor. Como posso obter a visão de uma linha? Eu quero definir um diferente ContextMenu para cada linha. Além disso, eu quero definir o ContextMenu para o cabeçalho de coluna.

Como implementá-lo na base da Tabela de componentes? Eu não quero usar o componente de Lista.

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

Melhor resposta

0

Para ter contextMenu trabalhando em SwiftUI 3.0 Tabela, é necessário adicioná-lo a cada TableColumn item. Além disso, se você deseja adicionar Double Tap o apoio é necessário para adicioná-lo de forma independente também.

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

Obrigado pela sua resposta, mas esta implementação só pode trabalhar o conteúdo da célula, não é possível cobrir completamente o conteúdo de toda a linha, e não terão efeito para a parte em branco da linha.
user1397892

Em outros idiomas

Esta página está em outros idiomas

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