我有EditNoteHost视图,它根据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。但是,当点击时,完成和取消按钮不起任何作用。
我该如何解决这个问题呢?
发布于 2021-01-28 21:47:05
您正在使用.constant(EditMode.active)设置editMode,它将保持活动状态。因此,不要将环境设置为editMode;而应使用:
NavigationLink(destination: EditNoteHost()) {
Image(systemName: "plus")
}在EditNoteHost中,使用
.onAppear() {
editMode?.animation().wrappedValue = .active
}https://stackoverflow.com/questions/65936588
复制相似问题