SwiftUI选择器无法显示选项

3

我似乎找不到任何关于这个问题的信息。所以我正在学习SwiftUI,尝试向Form中添加Picker,但当点击时该选择器不会显示可用选项。我真的不知道还有什么需要说的了,所以能否有人看一下并帮助我解决此问题?谢谢 :)

//Outside the body code
    @State var contacts: [String] = [""]
    @State var types: [Type] = [.mobile]
//Inside the body code and inside a Form{}
    Section(header: Text("Contact")){
            ForEach(0..<types.count, id: \.self) { i in
                HStack{
                    Picker(selection: $types[i], label: Text(""), content: {
                        Text("Mobile").tag(Type.mobile)
                        Text("Land Line").tag(Type.landline)
                        Text("Email").tag(Type.email)
                    }).pickerStyle(DefaultPickerStyle())
                    .frame(width: 80.0)
                    TextField("Insert Detail", text: $contacts[i])
                }
            }
            Button("Add Another") {
                types.append(.mobile)
                contacts.append("")
            }

ForEach(_:content:) 应该仅用于常量数据。相反,应符合 Identifiable 数据或使用 ForEach(_:id:content:) 并提供显式的 id!这是我测试您的代码时在控制台上打印的消息,很清楚出了什么问题。 - Tushar Sharma
@TusharSharma 显式 ID 应该长什么样? - Vulps
请确保types数组中每个枚举值都是唯一的,并使用以下代码:ForEach(0..<types.count, id:\.self) - Tushar Sharma
更正一下,我现在记得了,我之前有这个问题,并且根据我的需求改变了它,因为我需要循环的索引。是否有一种方法可以在明确指定ID的情况下获取索引i - Vulps
我怀疑我现在需要提出一个新问题来解决我所需的问题,如果你想发布你的答案,我会为你接受 :) @TusharSharma - Vulps
2个回答

5

我最近成功解决了这个问题。

在表单中使用选择器前,需要将其包装在NavigationView中。

我只需在我的视图顶部添加一个NavigationView并将表单放置在其中,现在选择器可以完美地工作。

var body: some View{
    NavigationView{
        Form{
            ....
            Picker()
            ....    
        }
    }
}

1

如评论中所述-:

ForEach(:content:) 仅适用于常量数据。相反,符合 Identifiable 的数据或使用 ForEach(:id:content:) 并提供明确的 id!

如果您想更新您的 types 数组,请将 forEach 行更改为 ForEach(0..,并确保您的枚举值在数组中是唯一的。


抱歉,我刚意识到这并没有真正解决问题 -_- 它让我的按钮工作了,但是我的 Picker 没有(这才是问题的主要点哈哈)。 - Vulps
选择器有什么问题吗?对我来说它运行良好。 - Tushar Sharma
它将显示“Mobile”,.mobile已经在类型数组中,但当我点击选择器更改选择时,什么也不会发生。 - Vulps
我的日志里也没有任何信息,甚至不确定如何调试这个问题。 - Vulps
似乎在iOS 14.5中表单存在错误。 - Tushar Sharma
我刚刚自己试了一下,选择器在表单外面运行得很好,所有的东西在表单外面都很好 -_- .....现在可能需要重新构建我的代码,使用List而不是Form。 - Vulps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接