I'm trying to enable editMode, i.e to come from here:
to here :
with the following code:
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
}
}
This works fine, if it is the first view being called from scenedelegate. If I request it from a different "first" view with
.sheet(isPresented: $showDetailSheet, content: {DetailSheet()})
or
.fullScreenCover(isPresented: $showDetailSheet, content: {DetailSheet()})
It does not work anymore. It does work again, if I request the view with a NavigationLink ( if I delete the two lines for NavigationView{ and }.
Am I doing something wrong? If not, can anyone explain me, why editMode doesn't work, if the view was requested by .sheet?
Thanks in advance!
Edit: This is the code of the view (which is called from SceneDelegate) from where I call up DetailView
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()})
}
}
One thing that can mess up EditButton (and more generally the editMode environment value) are extensions on Binding. Specifically, if you make Binding conform to Equatable, problems will occur with editMode.
Change any reference of:
extension Binding : Equatable where Value : Equatable {
to
extension Binding : Equatable where Value == MyType {
Where MyType is the name of your type (which obviously cannot be EditMode, otherwise the problem will persist).