Я использую метод листа, чтобы отобразить простую форму, и я передаю ей пару переменных. Проблема в том, что если я нажимаю кнопку, которая выполняет метод .dismiss () после изменения переданных в него переменных, это не работает. Вместо этого, если я нажимаю кнопку, она работает нормально. Вот код:
struct EditProductForm: View {
var listIndex : Int
var product : Product
@State var quantity: Int
@State var productName : String
@EnvironmentObject var data : Data
@Environment(\.presentationMode) var presentationModeEdit
func editProduct(){
self.data.editProduct(listIndex: self.listIndex, product: self.product, productName: self.productName, quantity: self.quantity)
}
var body: some View {
VStack{
Spacer()
VStack(spacing: 64){
Text("Edit Product")
TextField("Edit the name", text: $productName)
Picker(selection: $quantity, label: Text("Quantity")){
Text("OK").tag(Constants.Status.OK)
Text("Almost finished").tag(Constants.Status.ALMOST_NONE)
Text("Finished").tag(Constants.Status.NONE)
}.pickerStyle(SegmentedPickerStyle())
Button(action: {
self.editProduct()
self.presentationModeEdit.wrappedValue.dismiss()
}){
Text("Save")
}
}
Spacer()
}.padding(.horizontal)
}
}
Я также проверил, меняет ли переменная isPresented значение, и оно фактически переключается, когда я нажимаю кнопку, но лист остается там.
Вот код, в котором я использую form:
ForEach(self.list.content, id: \.self) { item in
Button(action: {
self.show_modal_edit[self.list.content.firstIndex(of: item)!] = true
}){
ProductCell(item: item)
}.sheet(isPresented: self.$show_modal_edit[self.list.content.firstIndex(of: item)!]){
EditProductForm(
listIndex: self.listIndex,
product: item,
quantity: item.quantity,
productName: item.productName
).environmentObject(self.data)
}
}
show_modal_edit - это список Bool, я проверил значения и, по-видимому, правильное значение передается в поле isPresented .sheet ().