macOS 上的 SwiftUI - 对 TableColumn 中的每一行使用 Picker

问题描述 投票:0回答:1

我正在 macOS 上的表格中显示一些项目(SwiftUI 3.0 中的新增功能)。在每列中显示

Text
视图时,我可以让表格正常工作,但我真的想在其中一列中显示
Picker
视图。但我不确定如何将选择器的选择“绑定”到用于驱动项目列表的数组中的项目。

这是我正在尝试的代码:

struct TestSwiftUIView: View {
    
    @State var mappingFields: [ImportMappingField]
    
    var body: some View {
        
        VStack {
            Table(mappingFields) {
                
                TableColumn("Imported Field") { item in
                    Text("\(item.columnName)")
                }.width(160)
                TableColumn("Mapped Field") { item in
                    Text("\(item.fieldName.typeNameAndDescription.description)")
                }.width(150)
                
                TableColumn("Type") { item in
                    Picker("", selection: $item.selectedCustomFieldType){ // error here
                        ForEach(ImportMappingType.allCases, id:\.self ) { i in
                                Text(i)
                        }
                    }
                }.width(100)
            }
        }
    }
}

selection: $item.selectedCustomFieldType
中,我收到一条错误消息

“在范围内找不到‘$item’”

所以我想将每个选择器绑定到每个“项目”中的一个元素,但它不允许我这样做。

这个问题有好的解决办法吗?

macos swiftui
1个回答
4
投票

尝试使用这种方法来为您提供所需的

item
绑定:

Table($mappingFields) {  // <-- here

                TableColumn("Type") { $item in  // <-- here
                    Picker("", selection: $item.selectedCustomFieldType){
                    ...
                    }

其他

TableColumn
也类似。您可能必须使
ImportMappingField
符合
Identifiable

© www.soinside.com 2019 - 2024. All rights reserved.