我有一个元素数组,我想使用Picker
从中选择一个元素,还有一个Button
,它只是向该数组中添加了一个新元素。问题是,当我添加元素时,Picker
选项不会更新。它不适用于DefaultPickerStyle
,但适用于SegmentedPickerStyle
。
代码:
import SwiftUI
struct ExampleView: View {
@State
var array : Array<Int> = [Int]()
@State
var selection : Int = 0
var body: some View {
VStack {
Picker("", selection: self.$selection) {
ForEach(self.array, id : \.self) { i in
Text(String(i))
}
}
// uncomment, and picker will refresh upon pushing the button
//.pickerStyle(SegmentedPickerStyle())
Button(action: {
self.array.append(self.array.count)
}){
Text("Add me: " + String(self.array.count))
}
}
}
}
struct ExampleView_Previews: PreviewProvider {
static var previews: some View {
ExampleView()
}
}
有什么办法可以解决这个问题?我真的需要更新Picker(以其默认样式)。 Xcode版本11.2.1(11B500)。
答案 0 :(得分:1)
正如@ e-coms所指出的,有一个similar question。 @p-ent(github)发现的一种可接受的解决方法是在每次按下按钮时为.id(...)
重新分配一个唯一的Picker
,以强制进行更新。适应了我的问题:
UPD:更好,谢谢@ e-coms
import SwiftUI
struct ExampleView: View {
@State
var array : Array<Int> = [0,1,2]
@State
var selection : Int = 0
var body: some View {
VStack {
Picker("", selection: self.$selection) {
ForEach(self.array, id : \.self) { i in
Text(String(i))
}
}
.id(self.array)
Button(action: {
self.array.append(self.array.count)
}){
Text("Add me: " + String(self.array.count))
}
}
}
}
struct ExampleView_Previews: PreviewProvider {
static var previews: some View {
ExampleView()
}
}