簡體   English   中英

SwiftUI TabView 和 NavigationView 混合 - 彈出到根目錄不起作用

[英]SwiftUI TabView and NavigationView Mixed - Pop To Root doesn't work

似乎很明顯,當我同時使用 TabView 和 NavigationView - Pop To Root 不起作用。 這是我實現的兩個測試代碼。 一種同時具有 tabView 和 NavigationView,一種僅具有 Navigation View。

  1. 帶有 TabView 和 NavigationView 的代碼
import SwiftUI

class Views: ObservableObject {
  @Published var stacked = false
}

struct ContentView: View {
  @ObservedObject var views = Views()
  @State var selection: Int = 0

  var body: some View {
    NavigationView {
      TabView(selection: $selection) {
        ContentView2()
      }
    }
    .environmentObject(views)
  }
}

struct ContentView2: View {
  @EnvironmentObject var views: Views
  var body: some View {
    NavigationLink(destination: ContentView3(), isActive: $views.stacked) {
      Text("Go to View 2")
    }
    .isDetailLink(false)
  }
}

struct ContentView3: View {
  @EnvironmentObject var views: Views

  var body: some View {
    VStack {
      Button("Pop to root") {
        self.views.stacked = false
      }
    }
    .navigationBarTitle("View 3")
  }
}

  1. 僅代碼導航視圖
  • 只需從代碼中刪除TabView括號,它就可以像魅力一樣工作......

當我嘗試在 tabview 中彈出到 root 時,顯示一條日志Trying to pop to a missing destination at /Library/Caches/com.apple.xbs/Sources/Monoceros/Monoceros-120/Shared/NavigationBridge_PhoneTV.swift:341

有沒有人找到辦法頂 TabView 和 NavigationView,並實現 pop To Root?

試試這個:

import SwiftUI


struct ContentView: View {
    @State var isActive : Bool = false

    var body: some View {
        NavigationView {
            NavigationLink(
                destination: ContentView2(rootIsActive: self.$isActive),
                isActive: self.$isActive
            ) {
                Text("Hello, World!")
            }
            .isDetailLink(false)
            .navigationBarTitle("Root")
        }
    }
}

struct ContentView2: View {
    @Binding var rootIsActive : Bool

    var body: some View {
        NavigationLink(destination: ContentView3(rootIsActive: self.$rootIsActive)) {
            Text("Hello, World #2!")
        }
        .isDetailLink(false)
        .navigationBarTitle("Two")
    }
}

struct ContentView3: View {
    @Binding var rootIsActive : Bool

    var body: some View {
        NavigationLink(destination: ContentView4(shouldPopToRootView: self.$rootIsActive)) {
            Text("Hello, World #3!")
        }
        .isDetailLink(false)
        .navigationBarTitle("Three")
    }
}

struct ContentView4: View {
    @Binding var shouldPopToRootView : Bool

    var body: some View {
        VStack {
            Text("Hello, World #4!")
            Button (action: { self.shouldPopToRootView = false } ){
                Text("Pop to root")
            }
        }.navigationBarTitle("Four")
    }
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM