SwiftUI - 弹出到详细信息视图

时间:2021-03-30 03:23:18

标签: swift swiftui swiftui-navigationlink swiftui-navigationview

我正在尝试按照 this thread 中提供的 Pop to Root View 示例来访问列表中的详细视图,然后在我推送到其他几个视图后弹回该详细视图。流程可能如下所示:

List > contentview1 (detail view) > contentview2 or contentview3 > contentview4 > contentview1 (detail view)

以下代码可以正常工作,但在模拟器中存在问题。有时它会按预期工作,但有时导航链接会加载错误的视图,或者“弹出到一个”链接突然停止工作。

我可以让原始的 Pop to Root 示例正常工作,直到我添加一个带有 ForEach 的 List。经过几天的反复试验,我的想法已经用完了......

我应该补充一点,我无法在设备上对此进行测试,因为我目前已超出我的 App ID 限制:[

非常感谢您能提供的任何帮助!

import SwiftUI

struct ContentView: View {

let persons: [Person] = [Person(name: "Jojo"), Person(name: "Betsy"), Person(name: "Steve"), Person(name: "Alex"),Person(name: "Tim")]

var body: some View {
    NavigationView {
        List {
            ForEach(persons, id: \.self) { person in
                    NavigationLink(
                        destination: ContentView1(person: person))
                        { Text("\(person.name)")}.isDetailLink(true)
                }
            }.navigationBarTitle("List")
    }
}
}

struct ContentView1: View {
@State var content1IsActive : Bool = false

let person: Person

var body: some View {
    
    VStack{
        NavigationLink(destination: ContentView2(shouldPopToRootView: self.$content1IsActive), isActive: self.$content1IsActive) {
            Text("To two")
        }
        .isDetailLink(false)
        
        NavigationLink(destination: ContentView3(shouldPopToRootView2: self.$content1IsActive), isActive: self.$content1IsActive) {
            Text("to three")
        }
        .isDetailLink(false)
        
    }.navigationBarTitle("\(person.name)")
}
}

struct ContentView2: View {
@Binding var shouldPopToRootView : Bool

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

struct ContentView3: View {
@Binding var shouldPopToRootView2 : Bool

var body: some View {
    VStack {
        Text("Hello, World #3!")
        Button (action: { self.shouldPopToRootView2 = false } ){
            Text("Pop to One")
        }
        NavigationLink(destination: ContentView4(shouldPopToRootView3: self.$shouldPopToRootView2)) {
            Text("to Four")
        }
        .isDetailLink(false)
        NavigationLink(destination: ContentView2(shouldPopToRootView: self.$shouldPopToRootView2)) {
            Text("to Two")
        }
        .isDetailLink(false)
    }.navigationBarTitle("Three")
}
}

struct ContentView4: View {
@Binding var shouldPopToRootView3 : Bool

var body: some View {
    VStack {
        Text("Hello, World #3!")
        Button (action: { self.shouldPopToRootView3 = false } ){
            Text("Pop to One")
  

  }
        
        
    }.navigationBarTitle("Four")
}
}

struct Person: Hashable, Identifiable {
var id = UUID()
var name: String
}

0 个答案:

没有答案