use*_*892 6 contextmenu tablerow tablecolumn swiftui
我发现SwiftUI 3.0新增的表格组件就像一个玩具,可以轻松使用,但很难扩展更多的功能。
TableRow 和 TableColumn 继承自 value 对象。我怎样才能获得一行的视图?我想为每一行设置不同的上下文菜单。另外,我想为列标题设置ContextMenu。
在Table组件的基础上如何实现呢?我不想使用列表组件。
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)
}
}
Run Code Online (Sandbox Code Playgroud)
为了让 contextMenu 在 SwiftUI 3.0 Table 上工作,有必要将其添加到每个 TableColumn 项中。另外,如果您想添加Double Tap支持,也必须单独添加。
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 })
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1736 次 |
| 最近记录: |