以模态方式呈现新视图

问题描述 投票:0回答:1

我有 3 个视图 - ContentView()、View1()、View2()。 ContentView() 作为主视图,嵌入在 NavigationView 中。它有一个使用 .sheet() 以模态方式打开 View1() 的按钮。 View1 还嵌入到新的 NavigationView 中,并具有导航到 View2() 的 NavigationLink。

问题是我想将 View2() 作为一个新堆栈呈现,但它像 View1() 一样以模态方式呈现。

注意:我必须将 View1() 嵌入到新的 NavigationView 中,因为如果不这样做,那么 NavigationLinks 将无法在其上工作。

import SwiftUI

struct ContentView: View {
    @State private var isPresentingView1 = false

    var body: some View {
        NavigationView {
            VStack {
                Button("Open View1 Modally") {
                    isPresentingView1.toggle()
                }
                .sheet(isPresented: $isPresentingView1) {
                        View1()
                }
            }
        }
    }
}

struct View1: View {
    var body: some View {
        NavigationView{
            NavigationLink("Open View2", destination: View2())
                .navigationBarTitle("View 1")
        }
    }
}

struct View2: View {
    var body: some View {
        VStack {
            Text("View 2 Content")
            Spacer()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
swiftui navigationview
1个回答
0
投票

我找到了解决方案。如果有人遇到同样的问题,请发布。 “.sheet”中有一个 onDismiss 修饰符,它在工作表被关闭后运行。使用它,我能够实现所需的功能。

struct ContentView: View {
    @State private var isPresentingView1 = false
    @State private var isNewViewPresented = false

    var body: some View {
        NavigationView {
            VStack {
                Button("Open View1 Modally") {
                    isPresentingView1.toggle()
                }
                .sheet(isPresented: isPresentingView1, onDismiss: {
                    isNewViewPresented = true
                }) {
                    View1()
                }
                .background(
                    NavigationLink("", destination: View2(), isActive: $isNewViewPresented)
                )
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.