完成时的 SwiftUI EditButton 操作

sal*_*.dm 4 swift swiftui

如何设置当用户点击时要执行的操作EditButton?有可能这样做吗?

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

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

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 13

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

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

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

@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)
  }
})

Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案。应该是公认的答案! (2认同)