如何解决如何在 SwiftUI 中使用 DisclosureGroup 作为下拉列表?
我想使用 disclosureGroup 作为下拉列表,让用户选择并在文本框中显示选项。我已将数组存储在模型中并检索数据。
这是我在模型中的数组
var newContents: [String] = ["Yellow","Blue","Green","White"]
HStack{
Text("Select : ")
disclosureGroup("\(Myviewmodel.MyModel.newContents[0])",isExpanded: $isScollExpanded){
ScrollView {
vstack(alignment: .leading,spacing: 8){
ForEach(Myviewmodel.MyModel. newContents,id: \.self){ index in
Text("\(index)")
.onTapGesture {
self.Myviewmodel.MyModel.newContents[0] = index
withAnimation{
self.isScollExpanded.toggle()
}
}
}
}.padding()
}
}
}
这段代码的工作原理是,当我选择一个选项时,它会重复两次,并且缺少数组中的第一个字符串。任何人都可以帮我解决这个问题吗?
解决方法
代替或更改第一项,您可以为 selection
设置一个变量。更改 DisclosureGroup
标题并在点击时更改 selection
,如下所示。数据不再变异,只是选择发生了变化。
以下内容可以解决您的问题:
class MyModel: ObservableObject {
@Published var selection = "Yellow"
private let newContents: [String] = ["Yellow","Blue","Green","White"]
}
struct ContentView: View {
@State private var isScrollExpanded = false
//
var body: some View {
HStack{
Text("Select : ")
DisclosureGroup(MyViewModel.MyModel.selection,isExpanded: isScrollExpanded) {
ScrollView {
VStack(alignment: .leading,spacing: 8) {
ForEach(MyViewModel.MyModel.newContents,id: \.self) { str in
Text("\(str)")
.onTapGesture {
MyViewModel.MyModel.selection = str
withAnimation{
isScrollExpanded.toggle()
}
}
}
}.padding()
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。