'SwiftUI navigationLink isActivie not working [closed]
Purpose
My intention is to come back from view3 and return directly to view1
Current Status
My view hierarchy here is view1 -> view2 -> view3.
I use NavigationLink in view1 to open view2 and use Binding to pass a value to isActivie, then pass this value to view3, and when view3 is done, change the value passed to false and close view3 automatically.
But the result is that it stays in view2. Then the value passed in is equal to false
Background and code
// view 1
@State private var detailViewIsShow: Bool = false
var body some: View {
ForEach(boughtItems) { item in
NavigationLink(
destination: ItemDetailView(item: item, detailViewIsShow: $detailViewIsShow),
isActive: $detailViewIsShow
) {
ItemCellView(item: item)
}
.isDetailLink(false)
}
}
// view 2
@Binding var detailViewIsShow: Bool
@State var itemEditorViewIsShow: Bool = false
var body: some View {
ZStack(alignment: .bottom) {
NavigationLink(
destination: ItemEditorView(item: item, detailViewIsShow: $detailViewIsShow),
isActive: self.$itemEditorViewIsShow
) {
EmptyView()
}
.isDetailLink(false)
}
.padding(.horizontal, 16)
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden(true)
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
self.itemEditorViewIsShow = true
}, label: {
Image(systemName: "square.and.pencil")
.frame(width: 24, height: 24)
})
}
}
}
// view 3
@Binding var detailViewIsShow: Bool
struct body: some View {
someView()
.confirmationDialog("", isPresented: $isShowDeleteAlert) {
Button("delete", role: .destructive) {
item!.delete(context: context)
self.detailViewIsShow = false
presentationMode.wrappedValue.dismiss()
}
}
}
Solution 1:[1]
you can add onChange() listener in view 2 on "detailViewIsShow" property and when it is false, dismiss current view
.onChange(of: detailViewIsShow) { newValue in
if !newValue{
presentationMode.wrappedValue.dismiss()
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
