Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

editMode change not recognized in a TabView

Tags:

swift

swiftui

This code works perfectly when not in a TabView. Once it is placed in a TabView, the .editMode change does not appear to have any effect on the List.

struct ContentView: View {
    @Environment(\.editMode) var editMode
    var body: some View {
        TabView {
            myView().tabItem {
             Text("test")
            }.tag(0)
        }
    }
}
struct myView : View {
    @State var list = ["a", "b", "c"]
    @Environment(\.editMode) var editMode

    var body: some View {
        VStack {
            Button(action: {
                if self.editMode?.wrappedValue == .active {
                    self.editMode?.wrappedValue = .inactive
                } else {
                    self.editMode?.wrappedValue = .active
                }
            }, label: {
                Text("Edit")
            })
            List {
                ForEach(list, id:\.self) {val in
                    Text(val)
                }.onDelete(perform: { indexSet in
                    ()
                })
            }
        }
    }
}

Not sure if this is a bug, or if the .editMode is somehow different when in a TabView.

like image 987
Kevin McQuown Avatar asked Sep 03 '25 14:09

Kevin McQuown


1 Answers

You can explicitly inject the editMode:

struct myView: View {
    @State var list = ["a", "b", "c"]
    @Environment(\.editMode) var editMode

    var body: some View {
        VStack {
            Button(action: {
                if self.editMode?.wrappedValue == .active {
                    self.editMode?.wrappedValue = .inactive
                } else {
                    self.editMode?.wrappedValue = .active
                }
            }, label: {
                Text("Edit")
            })
            List {
                ForEach(list, id: \.self) { val in
                    Text(val)
                }.onDelete(perform: { indexSet in
                    ()
                })
            }
            .environment(\.editMode, editMode) // <- inject here
        }
    }
}
like image 89
pawello2222 Avatar answered Sep 05 '25 10:09

pawello2222