Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI无限子视图层次结构和面包屑_Ios_Swift_Navigation_Swiftui_Breadcrumbs - Fatal编程技术网

Ios SwiftUI无限子视图层次结构和面包屑

Ios SwiftUI无限子视图层次结构和面包屑,ios,swift,navigation,swiftui,breadcrumbs,Ios,Swift,Navigation,Swiftui,Breadcrumbs,我试图实现的是创建一个层次视图。我知道iOS不喜欢使用面包屑,但我需要从主视图导航到更深的子视图。它们需要嵌套和无限 您可以在下面的代码和gif中看到我迄今为止所做的工作。作为一名初学者,我不确定这是否是实现这种结构(嵌套在子视图中的无限子视图)的正确方法。此外,当我在视图中导航回视图时,添加的按钮(结构A)将消失。有什么问题吗 提前谢谢 您只需要将NavigationView移动到ContentView,因为一个视图层次结构上只需要一个视图,所以 struct ContentView:Vi

我试图实现的是创建一个层次视图。我知道iOS不喜欢使用面包屑,但我需要从主视图导航到更深的子视图。它们需要嵌套和无限

您可以在下面的代码和gif中看到我迄今为止所做的工作。作为一名初学者,我不确定这是否是实现这种结构(嵌套在子视图中的无限子视图)的正确方法。此外,当我在视图中导航回视图时,添加的按钮(结构A)将消失。有什么问题吗

提前谢谢


您只需要将
NavigationView
移动到
ContentView
,因为一个视图层次结构上只需要一个视图,所以

struct ContentView:View{
@ObservedObject var documentB=classB()
var body:一些观点{

导航视图{//您只需要将
NavigationView
移动到
ContentView
中,因为一个视图层次结构上只需要一个视图,所以

struct ContentView:View{
@ObservedObject var documentB=classB()
var body:一些观点{

NavigationView{//谢谢你的回答。实际上更让我困扰的是,这是否是无限子视图的正确结构?因为items(structA)在我回到主视图后,这些视图都消失了。好吧,因为你对视图这样做,但是如果你对模型这样做,它保持持久性并基于模型构造视图,那么所有的视图都将是持久性的……但这是不同的情况。谢谢你的回答。实际上更让我困扰的是,这是否是无限子视图的正确结构?因为在我返回主视图后,项(structA)会消失。好吧,因为你用视图来做这件事,但是如果你用模型来做这件事,它保持持久性并基于模型构造视图,那么所有的都将是持久性的……但这是不同的情况。
import SwiftUI

struct A: View, Identifiable {
    
    @EnvironmentObject var documentB: classB
    
    var id: Int
    var text: String
    var destinationLink: B?
    
    var body: some View {
            NavigationLink(destination: self.destinationLink) {
                VStack{
                    Rectangle()
                        .frame(width: 35, height:25)
                        .background(Color.red)
                    Text("\(text)")
                }
        }
    }
}

struct B: View, Identifiable {
    
    @EnvironmentObject var documentB: classB
    @State var arrayA: [A] = []
    
    var id: Int
    var text: String
    var mainText: String = "Placeholder"
    var body: some View {
        NavigationView {
            VStack {
                Spacer()
                ForEach(arrayA){ item in
                    item
                }
                Spacer()

                Button(action: {
                    let newB = B(id:self.documentB.arrayB.count+1, text:"B \(self.documentB.arrayB.count+1)")
                    self.documentB.arrayB.append(newB)
                    self.arrayA.append(A(id:self.arrayA.count+1, text:"AA \(self.arrayA.count+1)", destinationLink: newB))
                }) {
                    Text("Add A \(self.arrayA.count), B Count: \(self.documentB.arrayB.count)")
                }
            }
            .navigationBarTitle(text)
        }
    }
}

class classB: ObservableObject {
    
    @Published var arrayB: [B] = [B(id:1, text:"MainView")]
    
}

struct ContentView: View {

    @ObservedObject var documentB = classB()

    var body: some View {
            VStack {
                documentB.arrayB[0]
            }
            .environmentObject(documentB)
    }
}

struct ContentView: View {

    @ObservedObject var documentB = classB()

    var body: some View {
        NavigationView {    // << move it here from B
            VStack {
                documentB.arrayB[0]
            }
        }
        .environmentObject(documentB)
    }
}