Durum ve bağlamayı kullanarak bir gezinme görünümünde görünümler sunmaya ve reddetmeye çalışan bir proje üzerinde çalışıyorum. Bunu yapmamın nedeni, @Ortamında bir hata var(.presentationMode) var presentaionMode: Bağlama model. Garip davranışlara neden oluyor. Bu yazıda burada tartışıldı.
Aşağıdaki örnekte, görünüme aşamalı olarak yüklenen üç görünüm vardır. Navview1'e ilk iki içerik görünümü mükemmel bir şekilde sunulur ve reddedilir. Ancak, NavView2 yüklendikten sonra presentNavView2 durumunu değiştirmek için kullanılan düğme yığına başka bir NavView2 görünümü ekleyerek sona erer ve beklendiği gibi kapatmaz. Neden olabileceği hakkında fikri olan bu olurdu?
İçerik Görünümü
struct ContentView: View {
@State private var presentNavView1 = false
var body: some View {
NavigationView {
List {
NavigationLink(destination: NavView1(presentNavView1: self.$presentNavView1), isActive: self.$presentNavView1, label: {
Button(action: {
self.presentNavView1.toggle()
}, label: {
Text("To NavView1")
}) // Button
}) // NavigationLink
} // List
.navigationTitle("Home")
} // NavigationView
} // View
}
navview1comment
struct NavView1: View {
@State private var presentNavView2 = false
@Binding var presentNavView1: Bool
var body: some View {
List {
NavigationLink(destination: NavView2(presentNavView2: self.$presentNavView2), isActive: self.$presentNavView2, label: {
Button(action: {
self.presentNavView2.toggle()
}, label: {
Text("To NavView2")
}) // Button
}) // NavigationLink
Button(action: {
self.presentNavView1.toggle()
}, label: {
Text("Back")
})
} // List
.navigationTitle("NavView1")
} // View
}
NavView2
struct NavView2: View {
@Binding var presentNavView2: Bool
var body: some View {
VStack {
Text("NavView2")
Button(action: {
self.presentNavView2.toggle()
}, label: {
Text("Back")
}) // Button
} // VStack
.navigationTitle("NavView2")
}
}