繁体   English   中英

创建没有返回按钮的 NavigationLink SwiftUI

[英]Create a NavigationLink without back button SwiftUI

我试图链接 SomeView1() 中的按钮操作以导航到 someView2() 而没有屏幕顶部的后退按钮。 相反,我想在 SomeView2() 中添加另一个按钮,该按钮将导航回 SomeView1()。 这在 SwiftUI 中可能吗?

SomeView1()

struct SomeView1: View {
    var body: some View {
        NavigationView {
            VStack {
                //...view's content

                NavigationLink(destination: SomeView2()) {
                    Text("go to SomeView2")
                }
                Spacer()
            }
        }
    }
}

SomeView2()

struct SomeView2: View {
    var body: some View {
        NavigationView {
            VStack {
                //...view's content

                NavigationLink(destination: SomeView1()) {
                    Text("go to SomeView1")
                }
                Spacer()
            }
        }
    }
}

这是它的样子: 在此处输入图像描述

在这里得到你想要的东西的正确方法是使用presentationMode环境变量:

import SwiftUI

struct View2: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var body: some View {
        VStack {
            Button(action: {
                self.presentationMode.wrappedValue.dismiss()
            }) {
                Text("POP")
            }
        }
        .navigationBarTitle("")
        .navigationBarBackButtonHidden(true)
        .navigationBarHidden(true)
    }
}

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: View2()) {
                Text("PUSH")
                    .navigationBarTitle("")
                    .navigationBarHidden(true)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

您可以在SomeView2()中执行以下操作:

NavigationView {
   VStack {
            //...view's content

        NavigationLink(destination: SomeView1()) {
            Text("go to SomeView1")
        }
        Spacer()
    }
}.navigationBarBackButtonHidden(true)

我相信你应该在整个导航过程中只使用一个 NavigationView。 现在,您在彼此内部拥有了三个 NavigationView,这会产生三个后退按钮。

所以在你的情况下,它会变成这样:

struct SomeView1InsideNavigationView: View { // This should be the first view you present
    var body: some View {
        NavigationView { // Use NavigationView only once
            SomeView1()
        }
    }
}

struct SomeView1: View {
    var body: some View {
        VStack { // Do *not* use NavigationView here
            //...view's content

            NavigationLink(destination: SomeView2()) {
                Text("go to SomeView2")
            }
            Spacer()
        }
    }
}

struct SomeView2: View {
    var body: some View {
        VStack { // Do *not* use NavigationView here
            //...view's content

            NavigationLink(destination: SomeView1()) {
                Text("go to SomeView1")
            }
            Spacer()
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM