当用户在 macOS 上单击 SwiftUI 时Table
,我想知道被点击的是哪对(列,行),或者说是哪一点。我给 添加了onTapGesture()
处理程序Table
,但它从未被调用。我该如何确定被点击的是哪一列,哪一行?
我的目标是在视图模型中实现单元格选择。我需要能够确定点击的(列,行)对,以便在视图模型中选择正确的单元格。
下面是 Apple 示例代码,我在其中添加了无效onTapGesture()
处理程序。
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()
}
将 a 传递
View
给TableColumn
s,并将点击手势添加到其中。我已使用
frame
和contentShape
来尽可能增加可点击区域。如果没有这些,表格单元格的空白部分将无法点击。如果这仍然不令人满意,我建议
NSTableView
用 包裹NSViewRepresentable
。您可以将其设置action
为一个方法,然后在该方法中访问clickedColumn
和clickedRow
。以下是一个简单的演示: