प्रोग्राम पेश करने और खारिज दर्शनों की संख्या SwiftUI

0

सवाल

मैं कर रहा हूँ एक परियोजना पर काम कर रहा है कि प्रयास करने के लिए वर्तमान और खारिज दर्शनों की संख्या में एक NavigationView का उपयोग राज्य और बाध्यकारी है । कारण है कि मैं कर रहा हूँ यह वहाँ है में एक बग @पर्यावरण(.presentationMode) वार presentaionMode: बाइंडिंग मॉडल. यह कारण अजीब व्यवहार. यह चर्चा इस पोस्ट में यहाँ.

नीचे दिए गए उदाहरण में तीन विचार कर रहे हैं कि उत्तरोत्तर पर लोड करने के लिए देखें. पहले दो ContentView करने के लिए NavView1 वर्तमान और पूरी तरह से खारिज. हालांकि, एक बार NavView2 भरी हुई है, बटन प्रयोग किया जाता है कि टॉगल करने के लिए राज्य के presentNavView2 समाप्त होता जोड़ने के एक और NavView2 देखने पर ढेर नहीं है और इसे खारिज के रूप में की उम्मीद है. किसी भी विचार के रूप में करने के लिए क्यों यह होगा?

ContentView

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
}

NavView1

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")
    }
}
swiftui
2021-11-23 20:52:10
1

सबसे अच्छा जवाब

0

आप उपयोग कर सकते हैं DismissAction, क्योंकि PresentationMode पदावनत किया जाएगा. मैं करने की कोशिश की कोड है और यह काम करता है पूरी तरह से! यहाँ तुम जाओ!

import SwiftUI

struct MContentView: View {
    @State private var presentNavView1 = false
    
    var body: some View {
        NavigationView {
            List {
                NavigationLink(destination: NavView1(), isActive: self.$presentNavView1, label: {
                    Button(action: {
                        self.presentNavView1.toggle()
                    }, label: {
                        Text("To NavView1")
                    })
                })
            }
            .navigationTitle("Home")
        }
    }
}

struct NavView1: View {
    @Environment(\.dismiss) private var dismissAction: DismissAction
    
    @State private var presentNavView2 = false
    
    var body: some View {
        List {
            NavigationLink(destination: NavView2(), isActive: self.$presentNavView2, label: {
                Button(action: {
                    self.presentNavView2.toggle()
                }, label: {
                    Text("To NavView2")
                })
            })
            Button(action: {
                self.dismissAction.callAsFunction()
            }, label: {
                Text("Back")
            })
        }
        .navigationTitle("NavView1")
    }
}

struct NavView2: View {
    @Environment(\.dismiss) private var dismissAction: DismissAction

    var body: some View {
        VStack {
            Text("NavView2")
            Button(action: {
                self.dismissAction.callAsFunction()
            }, label: {
                Text("Back")
            })
        }
        .navigationTitle("NavView2")
    }
}

struct MContentView_Previews: PreviewProvider {
    static var previews: some View {
        MContentView()
    }
}
2021-11-24 09:23:51

इस महान लग रहा है, लेकिन यह केवल उपलब्ध iOS में 15. इस के लिए धन्यवाद, हालांकि.
jonthornham

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................