import SwiftUI
struct ContentView: View {
@State private var items: [ItemModel] = Array(0...100).map { ItemModel(id: $0, title: "item \($0)", age: $0) }
@State private var selection = Set<ItemModel.ID>()
@State private var sorting = [KeyPathComparator(\ItemModel.age)]
var body: some View {
Table(items, selection: $selection, sortOrder: $sorting) {
TableColumn("id", value: \.id) { Text("\($0.id)") }
TableColumn("title", value: \.title)
TableColumn("age", value: \.age) { Text("\($0.age)") }
}
.onChange(of: sorting) {
items.sort(using: $0)
}
.font(.caption)
.frame(width: 960, height: 540)
}
}
struct ItemModel: Identifiable {
var id: Int
var title: String
var age: Int
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
这是一个工作的例子,一个表排序的模型。年龄,并支持多重选择,我想单一的选择和打开工作表双击一行,这是可能的吗?还有,我如何得到选定的项目对象?
谢谢🙏
3条答案
按热度按时间cmssoen21#
必须将
Set<Value.ID>
更改为Value.ID
(仅用于一个行选择),并将TapGesture
设置为文本。v6ylcynt2#
像亚当评论的那样,另一个答案在选择区域和响应时间方面存在许多问题。
您确实需要将var selection设置为
ItemModel.ID?
,但是您还需要以不同的方式处理单击操作。值得注意的是,这将只从大苏尔工作。
我处理单击和双击的不同操作的方式如下:
对于您的示例:
如果要允许在整行中单击和双击,则需要使TableColumn内容填充列的整个宽度,并对TableColumn内容的其余部分应用修饰符。
8tntrjer3#
关于双击表格行:Apple在WWDC 2022上推出了SwiftUI 4的新上下文菜单修改器contextMenu(forSelectionType:menu:primaryAction:)。通过该修改器,可以提供用户双击
Table
行时执行的primaryAction
。