首页 > 解决方案 > editMode 在 .sheet 或 .fullScreenCover 但使用 NavigationLink 的情况下不起作用

问题描述

我正在尝试启用editMode,即来自这里:

在此处输入图像描述

到这里 :

在此处输入图像描述

使用以下代码:

struct DetailSheet: View {

@State private var items: [Item] = (0..<5).map { Item(title: "Item #\($0)") }

var body: some View {
    NavigationView { // this line to be deleted for using navigationLink
    List {
                ForEach(items) { item in
                    Text(item.title)
                }
                .onMove { (from, to) in
                    print("just a dummy")
                }
            } // List
                .navigationBarTitle("List")
              
              .navigationBarItems(leading: EditButton())
   } // this line to be deleted for using navigationLink
}

}

如果它是从场景委托调用的第一个视图,这很好。如果我从不同的“第一”视图请求它

 .sheet(isPresented: $showDetailSheet, content: {DetailSheet()})

或者

.fullScreenCover(isPresented: $showDetailSheet, content: {DetailSheet()})

它不起作用了。如果我使用 NavigationLink 请求视图(如果我删除 NavigationView{ 和 } 的两行,它会再次起作用。

难道我做错了什么?如果没有,谁能解释一下,如果.sheet 请求了视图,为什么editMode 不起作用?

提前致谢!

编辑:这是我调用 DetailView 的视图代码(从 SceneDelegate 调用)

struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext

@State var showDetailSheet : Bool = false


var body: some View {
    NavigationView{
    List {
        NavigationLink(destination: DetailSheet(), label:{ Text("naviDetailSheet")})
        Button(action: {showDetailSheet = true}){Text("DetailSheet")}
        
       
     } // List
        
    .navigationBarItems(trailing: EditButton())
    } // Navi
    .sheet(isPresented: $showDetailSheet, content: {DetailSheet()})
//        .fullScreenCover(isPresented: $showDetailSheet, content: {DetailSheet()})
    
        }

}

标签: listswiftuiswiftui-navigationlinkeditmode

解决方案


推荐阅读