I have a simple List inside a navigation stack with a toolbar. The toolbar contains an edit button and a "Finished" button to dismiss the view. How do I hide the "Finished" button when the view is in edit mode?
In the code below, I'm trying to use the environment variable editMode. This does not currently work correctly. It correctly hides the "Finished" button when I first press "edit" but it does not correctly reshow the button when I press "done". Also, pressing "edit" does not immediately switch to edit mode--it now takes two taps on the button to enter edit mode.
How do I correct this so that "done" returns when not editing and so that I only need press edit once to enter edit mode?
import SwiftUI
struct TestView: View {
@Environment(\.dismiss) var dismiss
@Environment(\.editMode) private var editMode
@State var tests:Array<String> = ["A","B","C"]
var body: some View {
NavigationStack{
List{
Section("Recent"){
ForEach(tests, id:\.self){ test in
Text(test)
}
.onDelete{ indexes in
tests.remove(atOffsets: indexes)
}
.onMove{ source, destination in
tests.move(fromOffsets: source, toOffset: destination)
}
}
}
.navigationTitle("Test")
.toolbar{
ToolbarItem(placement: .navigationBarLeading){
EditButton()
}
if editMode?.wrappedValue.isEditing == false{
ToolbarItem(placement: .navigationBarTrailing){
Button("Finished"){
dismiss()
}
}
}
}
}
}
}
#Preview {
TestView()
}
To
... hide the "Finished" button when the view is in edit mode...
, you could try this approach, where you declare aisEditing
var with asimultaneousGesture
to toggle it and set the.environment(\.editMode,...)
accordingly, as shown in the example code: