我有 EditNoteHost
View ,它根据 editMode 环境变量显示 NoteView
或 EditNote
。 Aslo Cancel
按钮在编辑模式下显示:
struct EditNoteHost: View {
@EnvironmentObject var modelData: ModelData
@Environment(\.editMode) var editMode
@State private var draftNote = Note.default
var body: some View {
VStack(alignment: .leading, spacing: 20) {
HStack {
if editMode?.wrappedValue == .active {
Button("Cancel") {
draftNote = modelData.selectedNote
editMode?.animation().wrappedValue = .inactive
}
}
Spacer()
EditButton()
}
if editMode?.wrappedValue == .inactive {
NoteView(note: modelData.selectedNote)
} else {
EditNote(note: $draftNote)
.onAppear {
draftNote = modelData.selectedNote
}
.onDisappear {
modelData.selectedNote = draftNote
}
}
}
.padding()
}
}
struct EditNoteHost_Previews: PreviewProvider {
static var previews: some View {
EditNoteHost()
.environmentObject(ModelData())
}
}
这段代码工作正常。
现在我想在 NavigationLink
中使用 EditNoteHost
并以编辑模式启动它:
NavigationLink(destination: EditNoteHost().environment(\.editMode, Binding.constant(EditMode.active)).environmentObject(modelData)) {
Image(systemName: "plus")
}
这部分代码点击+
会以编辑模式打开EditNoteHost
。但是,点击“完成”和“取消”按钮时不会执行任何操作。
我该如何解决这个问题?
最佳答案
您正在使用 .constant(EditMode.active)
设置 editMode
,它将保持事件状态。所以不要设置editMode
的环境;而是使用:
NavigationLink(destination: EditNoteHost()) {
Image(systemName: "plus")
}
并在EditNoteHost
中,使用:
.onAppear() {
editMode?.animation().wrappedValue = .active
}
关于ios - 在 NavigationLink 中设置 editMode 时,SwiftUI EditButton() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65936588/