Всем привет!
SwiftUI.
Размещаем объявление (а-ля авито)
Через NavigationView с основного экрана переходим в categoryView потом в subCategoryView и потом в detailView (где публикуем объявление.)
Закрываем detailView через presentationMode.wrappedValue.dismiss()
detailView закрывается, и нас перекидывает в subCategoryView.
Вопрос - как сделать так, чтобы при закрытии detailView закрывались categoryView и subCategoryView ?
Благодарю!
Как закрыть все modal view одновременно?
Nick777
#1
ODiN
#2
Элементарно:
достаточно в корневом вью (куда вы хотите вернуться) использовать навигейшен линк с конструктором isActive. В последнем вью переключить на false переменную, управляющую параметром isActive. Можно использовать какой-то общий класс, как у меня в примере, или передавать данную переменную вниз по иерархии View через Binding - как удобнее.
class ViewModel: ObservableObject {
@Published var isActive = false
}
@main
struct TestPopToRootApp: App {
let vm = ViewModel()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(vm)
}
}
}
struct ContentView: View {
@EnvironmentObject var vm: ViewModel
var body: some View {
NavigationView {
NavigationLink("Go to view2", destination: NavView2(), isActive: $vm.isActive)
.navigationTitle(Text("Root view"))
}
}
}
struct NavView2: View {
var body: some View {
NavigationLink("Go to view3", destination: NavView3())
.navigationTitle(Text("view2"))
}
}
struct NavView3: View {
@EnvironmentObject var vm: ViewModel
var body: some View {
Button {
vm.isActive = false
} label: {
Text("Back to root")
}
.navigationTitle(Text("view3"))
}
}