首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NavigationLink中设置editMode时,SwiftUI EditButton()不起作用

在NavigationLink中设置editMode时,SwiftUI EditButton()不起作用
EN

Stack Overflow用户
提问于 2021-01-28 19:52:43
回答 1查看 281关注 0票数 1

我有EditNoteHost视图,它根据editMode环境变量显示NoteViewEditNote。在编辑模式下显示Aslo Cancel按钮:

代码语言:javascript
复制
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,并在编辑模式下启动它:

代码语言:javascript
复制
NavigationLink(destination: EditNoteHost().environment(\.editMode, Binding.constant(EditMode.active)).environmentObject(modelData)) {
                    Image(systemName: "plus")
                }

如果单击+,这部分代码将在编辑模式下打开EditNoteHost。但是,当点击时,完成和取消按钮不起任何作用。

我该如何解决这个问题呢?

Screenshot

EN

回答 1

Stack Overflow用户

发布于 2021-01-28 21:47:05

您正在使用.constant(EditMode.active)设置editMode,它将保持活动状态。因此,不要将环境设置为editMode;而应使用:

代码语言:javascript
复制
NavigationLink(destination: EditNoteHost()) {
    Image(systemName: "plus")
}

在EditNoteHost中,使用

代码语言:javascript
复制
.onAppear() {
    editMode?.animation().wrappedValue = .active
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65936588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档