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

标签 ios swift xcode swiftui swiftui-navigationlink

我有 EditNoteHost View ,它根据 editMode 环境变量显示 NoteViewEditNote 。 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。但是,点击“完成”和“取消”按钮时不会执行任何操作。

我该如何解决这个问题?

Screenshot

最佳答案

您正在使用 .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/

相关文章:

iphone - 如何通过 AirPrint 打印 UITextField 文本

ios - 如何最好地将巨大的 .sqlite 数据库移动到旧的低内存 iOS 设备上的新目录?

ios - Apple 吊销证书时会发生什么?

php - 如何在 Swift 3 中将值作为 NSDictionary 获取?

XCode 3.1.2,找不到头文件

iphone - UIImagePickerController 使应用程序崩溃,有时会重新启动设备 - 内存警告问题

iphone - MKMapView 自定义 UserLocation Annotation

ios - UIUserNotificationSettings 的 Swift 3.0 语法更改

arrays - 在数组内的自定义对象中搜索字典

swift - 在 UIView.animate 期间动画形状图层类型自定义 UIViews?