IOS 16 just came out and I was trying to update my app. While doing this, I stumbled upon a problem:
In IOS 15, I had a list where you could delete items. But this was only possible when the isEditing variable is true
. The problem is that .deleteDisabled()
does not do what I expect it to do.
I’ll explain what happens:
.deleteDisabled(isEditing ? true : false) -> Is Editing = Does not let me edit. Is Not Editing = Lets me edit
.deleteDisabled(isEditing ? false : true) -> Is Editing = Does not let me edit. Is Not Editing = Does not let me edit
What I want is to be able to ONLY edit when isEditing = true
. This worked fine in IOS 15 but not in IOS 16
Is this a bug? Is there a workaround?
Under is the complete code where the problem occurs:
import SwiftUI
struct ContentView: View {
@State var isEditing = false
@Environment(\.editMode) var mode
@State private var fruits = [
"Apple",
"Banana",
"Papaya",
"Mango"
]
var body: some View {
NavigationView {
VStack{
List {
ForEach(fruits, id: \.self) { fruit in
Text(fruit)
}
.onDelete { fruits.remove(atOffsets: $0) }
.deleteDisabled(isEditing ? false : true) // Does not work as expected
//.deleteDisabled(isEditing ? true : false) // Works as expected
}
}
.environment(\.editMode, .constant(self.isEditing ? EditMode.active : EditMode.inactive))
.animation(Animation.spring(), value: isEditing)
.navigationTitle("Fruits")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing){
Button(action: {
isEditing.toggle()
}, label: {
if(isEditing == true){
Text("Done")
}
else{
Text("Edit")
}
})
}
//EditButton()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}