SwiftUI如何创建一个按钮,将项目添加到包含导航链接的列表中

SwiftUI如何创建一个按钮,将项目添加到包含导航链接的列表中,swiftui,swiftui-list,Swiftui,Swiftui List,我从来没有做过这方面的文章,所以希望这是正确的设置 我是swift新手,我想创建一个按钮,将一个新项目添加到一个列表中,该列表包含一个导航链接,指向一个文件,该文件将使用以前项目中的链接数据创建,在花了几天的时间进行研究和测试后,我还没有找到任何方法来实现这一点 这就是我的应用程序当前的布局,我想在最后:,这里是我提到的不同Q1-4视图的预览: 我知道很多,所以让我更深入地解释一下:我想在所谓的“Q1”(如上所示)中有一个以“第1周”开头的列表,当您单击“添加”按钮时,我希望它添加一个“第2周”

我从来没有做过这方面的文章,所以希望这是正确的设置

我是swift新手,我想创建一个按钮,将一个新项目添加到一个列表中,该列表包含一个导航链接,指向一个文件,该文件将使用以前项目中的链接数据创建,在花了几天的时间进行研究和测试后,我还没有找到任何方法来实现这一点

这就是我的应用程序当前的布局,我想在最后:,这里是我提到的不同Q1-4视图的预览:

我知道很多,所以让我更深入地解释一下:我想在所谓的“Q1”(如上所示)中有一个以“第1周”开头的列表,当您单击“添加”按钮时,我希望它添加一个“第2周”,以此类推,最多10周。一旦你达到10周,我希望用户必须更改为不同的视图“Q2”,然后他们可以添加第11-20周,以此类推,直到第4季度,这将总共限制为40周。我希望每周包含一个指向新视图的导航链接;但是,我还希望在创建新的一周时,将上一周的数据结转过来,这样用户就不必手动输入上一周的数据

我知道如何通过使用JSON文件来处理这些数字,正如我所看到的教程,但是,我不认为这有什么意义,因为我只需要1-40个星期的数字,但我似乎无法让它与数组或任何东西一起工作。我知道我可以使用@EnvironmentObject从其他页面获取所需的数据,但我也不确定如何设置。除此之外,我被卡住了!这是我的密码:

import SwiftUI

struct BillsView: View {

    @State private var quarterNumber = 0

    let quarterNumbers = [1, 2, 3, 4]

    var body: some View {
        NavigationView{
            VStack {
               Section {
                    Picker("Quarter Number", selection: $quarterNumber) {
                        ForEach(0 ..< quarterNumbers.count) {
                            Text("Q\(self.quarterNumbers[$0])")
                        }
                    }
                    .pickerStyle(SegmentedPickerStyle())
                    .padding(.horizontal)
                    if quarterNumber == 0 {
                        Q1View()
                    } else if quarterNumber == 1 {
                        Q2View()
                    } else if quarterNumber == 2 {
                        Q3View()
                    } else if quarterNumber == 3 {
                        Q4View()
                    }
                }
            Spacer()
            }

            .navigationBarTitle("Bills")
            .navigationBarItems(leading: EditButton(),
            trailing: Button(action: {
                //Adds the new week
            }){
                Image(systemName: "plus.circle.fill")
            })

        }
    }
}

struct Q1View: View {

    @State private var weekNumber = 0

    let weekNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    var body: some View {
        List {
            NavigationLink(destination: Week1View()) {
                Text("Week 1")
            }
        }
    }
}

struct Week1View: View {
    var body: some View {
        List {
            link(label: "Gross Income", destination: GrossIncome())
            link(label: "Expenses", destination: Expenses())
        }.navigationBarTitle(Text("Week 1"), displayMode: .inline)
    }

    private func link<Destination: View>(label: String, destination: Destination) -> some   View {
        return NavigationLink(destination: destination) {
                Text(label)
        }
    }
}
导入快捷界面
结构BillsView:视图{
@国家私有var quarterNumber=0
设四分位数=[1,2,3,4]
var body:一些观点{
导航视图{
VStack{
部分{
选择器(“季度号”,选择:$quarterNumber){
ForEach(0..<四分之一数字.计数){
文本(“Q\(自身四分之一编号[$0]))
}
}
.pickerStyle(SegmentedPickerStyle())
.padding(.卧式)
如果quarterNumber==0{
Q1View()
}如果quarterNumber==1,则为else{
Q2View()
}如果quarterNumber==2,则为else{
Q3View()
}如果quarterNumber==3,则为else{
Q4View()
}
}
垫片()
}
.navigationBarTitle(“法案”)
.navigationBarItems(前导:EditButton(),
拖尾:按钮(操作:{
//添加新的一周
}){
图像(系统名称:“加号、圆圈、填充”)
})
}
}
}
结构视图:视图{
@国家私有变量weekNumber=0
让weekNumbers=[1,2,3,4,5,6,7,8,9,10]
var body:一些观点{
名单{
NavigationLink(目标:Week1View()){
文本(“第一周”)
}
}
}
}
结构Week1视图:视图{
var body:一些观点{
名单{
链接(标签:“总收入”,目的地:GrossIncome())
链接(标签:“费用”,目的地:费用()
}.navigationBarTitle(文本(“第1周”),显示模式:。内联)
}
专用func链接(标签:字符串,目的地:目的地)->某些视图{
返回导航链接(目的地:目的地){
文本(标签)
}
}
}

我不太确定我是否理解你的意思,但我举了一个非常简单的例子来回答你的标题问题

import SwiftUI

struct ContentView: View {

    @State private var list : [String] = ["Chris"]
    @State private var quarterNumber = 0

    var body: some View {
        Group () {
            Button(action: {
                self.list.append("whatever")
            }) {
                Text("tap me")
            }
            NavigationView{

                List(list, id: \.self) { item in

                    NavigationLink(
                        destination: View2(text: "hallo")
                            .navigationBarTitle(Text("Categories"), displayMode: .automatic)
                    ) {
                        Text("Categories")
                    }.isDetailLink(false) // damit der Doof nicht rechts das nächste Menu öffnet

                }
            }
        }
    }
}

struct View2: View {

    var text : String

    var body: some View {

        Text(text)
    }
}