首页 > 解决方案 > 完成时的 SwiftUI EditButton 操作

问题描述

EditButton当用户点击显示为“完成”时,您如何设置要执行的操作?甚至有可能这样做吗?

请注意,这与在用户可能执行的每个单独编辑(如onDeleteonMove)处执行操作不同。当用户完成所有更改并准备提交时,如何设置要执行的操作?

这是必要的,因为我正在对模型的临时副本进行所有更改,并且在用户点击“完成”之前不会将更改提交到实际模型。我还提供了一个“取消”按钮来放弃更改。

struct MyView: View {
    @Environment(\.editMode) var mode

    var body: some View {
        VStack {
            HStack {
                if self.mode?.value == .active {
                    Button(action: {
                        // discard changes here
                        self.mode?.value = .inactive
                    }) {
                        Text("Cancel")
                    }
                }

                Spacer()

                EditButton()
                // how to commit changes??
            }
            // controls to change the model
        }
    }
}

是否甚至可以在 上设置“完成”操作,EditButton或者我是否必须提供自己的按钮才能像 一样EditButton?我当然可以这样做,但似乎使用EditButton.

标签: swiftswiftui

解决方案


使用onChange 修饰符的 XCode 12/iOS 14 的新答案。

这种方法使用 SwiftUIeditMode键路径@Environment以及 newonChange修饰符来确定视图何时进入和退出编辑模式。

在您看来,请执行以下操作:

@Environment(\.editMode) private var editMode

...

.onChange(of: editMode!.wrappedValue, perform: { value in 
  if value.isEditing {
     // Entering edit mode (e.g. 'Edit' tapped)
  } else {
     // Leaving edit mode (e.g. 'Done' tapped)
  }
})


推荐阅读