因此,我在swiftui中有一个设置页工作表,(理论上)应该允许用户使用步进器添加和删除行,每行表示一个数字...步进器位于底部,整个事情是一个滚动视图...无论出于何种原因,当该视图出现时,我都无法从环境中加载该值,并且当更改值时,环境不会更新...我尝试设置此视图在出现时将环境属性复制到本地@State属性,然后在消失时将它们复制回去,但这并没有什么不同...
struct Settings_SetupNumbersView: View {
@EnvironmentObject var env: GlobalEnvironment_Main
@Binding var isPresented: Bool
@State var tempText = ""
var body: some View {
return ZStack {
VStack {
HStack {
Spacer()
Button("DONE") {
self.isPresented.toggle()
}
.padding(.horizontal, 20)
.padding(.vertical, 10)
}
Divider()
if env.numbers.count == 0 {
//
} else {
ScrollView {
ForEach(self.env.numbers.indices, id: \.self) { number in
ZStack {
Rectangle()
.frame(height: K.screenHeight / 15)
.foregroundColor(.white)
HStack {
Spacer()
.frame(width: K.screenWidth / 20)
Text("#\(self.env.numbers.count + 1)")
.font(Font.custom("Montserrat-Medium", size: 17.0))
.foregroundColor(Color(K.SettingsTextColor))
Spacer()
TextField("", text: $tempText, onCommit: {
self.tempText = self.env.numbers[self.env.numbersIndex]
print("number committed \(self.env.numbers[self.env.numbersIndex])")
})
.font(Font.custom("Montserrat-Regular", size: 17.0))
.foregroundColor(Color(K.SettingsTextColor))
.multilineTextAlignment(.trailing)
.padding(.horizontal, K.screenWidth / 20)
// Spacer()
// .frame(width: K.screenWidth / 20)
}
}
}
}
.frame(height: 20)
}
if env.numbers.count == 0 {
Text("Tap Plus Button to Add a Number")
.font(Font.custom("Montserrat-Medium", size: 17.0))
.foregroundColor(Color(K.SettingsTextColor))
.lineLimit(1)
.minimumScaleFactor(0.25)
}
Spacer()
HStack {
Spacer()
.frame(width: K.screenWidth / 20)
Text("Add/Remove Numbers")
.font(Font.custom("Montserrat-Medium", size: 17.0))
.foregroundColor(Color(K.SettingsTextColor))
.lineLimit(1)
.minimumScaleFactor(0.25)
Spacer()
Stepper(onIncrement: {
self.env.numbers.append("12345")
print("Number should be added")
print(env.numbers.indices)
print(self.env.numbers)
print("count = \(self.env.numbers.count)")
},
onDecrement: {
if self.env.numbers.count != 0 {
print("number should be removed")
self.env.numbers = self.env.numbers.dropLast()
print(env.numbers.indices)
print(self.env.numbers)
print("count = \(self.env.numbers.count)")
}
}) {
Text("")
}
.labelsHidden()
.padding(.vertical, K.screenHeight / 70)
Spacer()
.frame(width: K.screenWidth / 20)
}
}.onAppear(perform: {
print(env.numbers.indices)
})
}
}
}
SwiftUI是否有一个窍门,其中工作表演示文稿无法更新变量或类似的东西?我很茫然,工作表的布局正常工作,并且值根据print语句进入了env,但是当我解雇工作表并返回值重置时(当我点击加号时,它删除了数组一直在写入并写入一个新值)...如果一切正常,当我点击+添加新行时,-删除最后一个,并且如果我关闭工作表并返回创建的相同行,则仍然存在(基于env.numbers数组的值)