Я никогда не пробовал SwiftUI, но пришел из UIKit + RxSwift, так что я знаю, как работает связывание. Я прочитал довольно много примеров кодов из учебного пособия по SwiftUI, и способ, которым вы отклоняете модальный режим, действительно верен, но, очевидно, не для стека навигации. вар. Возможно, это не лучшее решение, но оно сработало!
Итак, у вас есть $isShowSheet
в вашем ContentView
. Передайте этот объект в структуру NavView
, объявив переменную в этом NavView
.
ContentView
.....
}.sheet(isPresented: $isShowSheet) {
NavView(isShowSheet: self.$isShowSheet)
}
NavView
struct NavView: View {
@Binding var isShowSheet: Bool
var body: some View {
NavigationView {
NavigationLink(destination: NavSubView(isShowSheet: self.$isShowSheet)) {
Text("Enter Sub View")
}
} .navigationViewStyle(StackNavigationViewStyle())
}
}
и, наконец, сделайте то же самое с вашим подвидом.
NavSubView
struct NavSubView: View {
@Environment(\.presentationMode) var presentationMode
@Binding var isShowSheet: Bool
var body: some View {
Text("Hello")
.navigationBarItems(trailing:
Button(action: {
//self.presentationMode.projectedValue.wrappedValue.dismiss()
self.isShowSheet = false
}){
Text("Done")
}
)
}
}
Теперь, как вы видите, вам просто нужно отправьте новый сигнал этому isShowSheet
переплету - false
.
self.isShowSheet = false
Вуаля!