【问题标题】:Non-deprecated way to call NavigationLink on Buttons在按钮上调用 NavigationLink 的非弃用方式
【发布时间】:2022-11-21 19:22:11
【问题描述】:

这是在Buttons 上调用NavigationLink 的旧方法

struct ContentView: View {
    @State private var selection: String? = nil
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: View1(), tag: "tag1", selection: $selection) {
                    EmptyView()
                }
                NavigationLink(destination: NotView1(), tag: "tag2", selection: $selection) {
                    EmptyView()
                }

                Button("Do work then go to View1") {
                    // do some work that takes about 1 second
                    mySleepFunctionToSleepOneSecond()
                    selection = "tag1"
                }

                Button("Instantly go to NotView1") {
                    selection = "tag2"
                }
            }
            .navigationTitle("Navigation")

        }
    }
}

此代码完美运行。它可以转到不同的View目标,具体取决于单击哪个按钮。不仅如此,它保证所有工作都已完成导航到目标视图。然而,唯一的问题是'init(destination:tag:selection:label:)' was deprecated in iOS 16.0: use NavigationLink(value:label:) inside a List within a NavigationStack or NavigationSplitView

我得到 NavigationStack 太棒了等等。但是我如何翻译代码以使用新的NavigationStack + NavigationLink。特别是,我怎样才能确保工作完成导航?

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    对于使用非弃用和做一些工作后,如果我们想转到下一个视图或在任何视图中,有一个叫做“.navigationDestination”的东西。让我们看看使用简单的例子。

        @State var bool : Bool = false
    
        var body: some View {
            NavigationStack {
               VStack {
                  Text("Hello, world!")
                
                  Button {
                  //Code here before changing the bool value
                      bool = true
                  } label: {
                      Text("JHAVHJ VAJHVSJFRV HJUA")
                  }
              }.navigationDestination(isPresented: $bool) {
                  SwiftUIView()
              }
           }
       }
    

    在此代码中,我们将 bool 值更改为 false,并在使用按钮完成工作后将其更改为 true。

    .navigationDestination(isPresented: Binding<Bool>, destination: () -> View)
    

    在 .navigationDestination 中传递 Binding bool 并提供您要导航的视图。

    您可以多次使用 .navigationDestination。

    希望你觉得这很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 2022-01-20
      • 2020-12-29
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多