Quando o usuário clica uma vez em uma SwiftUI Table
no macOS, gostaria de saber o par (coluna, linha) clicado, ou ponto. Adicionei onTapGesture()
um manipulador ao Table
, mas ele nunca é invocado. Como posso descobrir qual (coluna, linha) foi clicada?
Meu objetivo é implementar a seleção de células no meu modelo de visualização. Preciso ser capaz de determinar o par clicado (coluna, linha) para selecionar a célula correta no modelo de visualização.
Abaixo está o código de exemplo da Apple, ao qual adicionei o onTapGesture()
manipulador ineficaz.
struct Person: Identifiable {
let givenName: String
let familyName: String
let emailAddress: String
let id = UUID()
}
struct PeopleTable: View {
@State private var people = [
Person(givenName: "Juan", familyName: "Chavez", emailAddress: "[email protected]"),
Person(givenName: "Mei", familyName: "Chen", emailAddress: "[email protected]"),
Person(givenName: "Tom", familyName: "Clark", emailAddress: "[email protected]"),
Person(givenName: "Gita", familyName: "Kumar", emailAddress: "[email protected]")
]
var body: some View {
Table(people) {
TableColumn("Given Name", value: \.givenName)
TableColumn("Family Name", value: \.familyName)
TableColumn("E-Mail Address", value: \.emailAddress)
}
.onTapGesture(perform: { p in
print("clicked point \(p)")
})
}
}
#Preview {
PeopleTable()
}
Passe a
View
para oTableColumn
s e adicione o gesto de toque a ele.Usei
frame
econtentShape
para aumentar o número de toques possível. Sem eles, as partes vazias das células da tabela não são tocáveis.Se isso ainda não for satisfatório, recomendo encapsular um
NSTableView
com umNSViewRepresentable
. Você definiria itsaction
como um método e, em seguida, acessariaclickedColumn
eclickedRow
nesse método.Aqui está uma demonstração simples: