【发布时间】:2021-05-02 07:36:47
【问题描述】:
我有 EditNoteHost 视图,它根据 editMode 环境变量显示 NoteView 或 EditNote。还有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。但是,完成和取消按钮在点击时什么都不做。
我该如何解决这个问题?
【问题讨论】:
-
请提供独立的最小可重现示例。
标签: ios swift xcode swiftui swiftui-navigationlink