SwiftUI Picker 不绑定

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

我有一个简单的布局,我想在其中创建一个类别列表和一个项目列表。对于每个项目,我希望它使用一个选择器来确定它属于哪个类别。例如,如果“苹果”是一个项目,我希望它列在“水果”类别下。我希望底部的列表显示该项目及其所属的类别。所以这个会说“苹果水果”。出于某种原因,我认为选择器没有绑定,当我单击保存时它只显示项目,而不显示它属于哪个类别。选择器列表确实显示了我添加的所有类别,但我认为它没有绑定到 categoryString 变量。有什么帮助吗?这也有一些核心数据的东西,但为了简化理解正在发生的事情,我已经删除了一些。

struct CopyOfItemsView: View {
    private var listedItem: FetchedResults<Item>
    private var listedCategory: FetchedResults<Category>
    @State var categoryString: String = ""
    @State var nameString: String = ""
    var body: some View {
        VStack {
            // add new category
            TextField("Enter Text Here", text: $categoryString)
            Button {
                let newlistedCategory = Category(context: viewContext)
                newlistedCategory.categoryString = categoryString
                save()
                categoryString = ""
            } label: {
                Text("Save")
            }
            // add new item
            TextField("Enter Text Here", text: $nameString)
            Picker("category", selection: $categoryString) {
                ForEach(listedCategory) { listedCategory in
                    Text(listedCategory.categoryString!)
                }
            }
            Button {
                let newlistedItem = Item(context: viewContext)
                newlistedItem.nameString = nameString
                newlistedItem.categoryString = categoryString
                save()
                nameString = ""
                categoryString = ""
            } label: {
                Text("Save")
            }

            // list
            ForEach(listedItem) { listedItem in
                HStack {
                    Text(listedItem.nameString ?? "")
                    Text(listedItem.categoryString ?? "")
                }
            }
        }
    }

    private func save() {
        do {
            try viewContext.save()
        } catch {
            let nsError = error as NSError
            fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
        }
    }
}
swiftui binding picker
1个回答
1
投票

你需要

tag

Picker("category", selection: $categoryString) {
    ForEach(listedCategory) { listedCategory in
        Text(listedCategory.categoryString!)
            .tag(listedCategory.categoryString!)
    }
}

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