Programmatically เสและ Dismissing มุมมอง SwiftUI

0

คำถาม

ฉันทำงานให้โครงการนั้นก็คือพยายามของขวัญและไม่สนใจมุมมองใน NavigationView ใช้ของรัฐและผูกมัดหรอ. เหตุผลที่ฉันทำเรื่องนี้คือมันมีข้อผิดพลาดของ@สภาพแวดล้อม(.presentationMode)variance presentaionMode:ผูกมัดหรอ คุณครูแต่พอกลับมา มันทำให้แปลกพฤติกรรม มันเป็นคุยกันเรื่องในโพสลง ที่นี่.

ตัวอย่างด้านล่างนี้มีสามมุมมองที่ progressively โหลดอยู่ที่มุมมอง สองคนแรก 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 จะ deprecated. ฉันพยายามรหัสและมันทำงานได้เยี่ยมมา! นี่เธอออกไปเดี๋ยวนี้!

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ý
..................................................................................................................