swift - 完成时的 SwiftUI EditButton 操作
问题描述
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
}
}
}
是否甚至可以在 上设置“完成”操作,EditButton
或者我是否必须提供自己的按钮才能像 一样EditButton
?我当然可以这样做,但似乎使用EditButton
.
解决方案
使用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)
}
})
推荐阅读
- parsing - 使用 Pest.rs,我如何指定要锚定和整行的评论?
- vb.net - 获取 System.Exception:'不正确的功能。(HRESULT 例外:0x80070001)' 在 VB 中使用 MIDI
- python - 使用带有多个分隔符的 split() 时出现 ValueError
- macros - 为什么 foo 在这个 Racket 宏中与 (foo) 具有相同的值?
- java - 在 micronaut 应用程序中访问 application.yml 中的环境变量
- docker - 更新 .net Core App docker 镜像以获取最新的安全补丁
- resize - GTK 请求大小为整数倍
- hadoop - 有没有办法将来自 Lexalytics 等商业智能工具的数据连接到 Hadoop 数据库?
- python - 从 Python 中的两个列表生成有序对
- search - autohotkey:释放一个键发送“返回”?