SwiftUI Stepper-不提交对视图或环境对象的更改

时间:2020-08-07 04:03:28

标签: ios swift xcode swiftui

因此,我在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数组的值)

0 个答案:

没有答案