我以前从未对此发表过文章,因此希望此设置正确。
我是Swift的新手,我想创建一个将新项目添加到列表的按钮,该列表包含指向该文件的导航链接,该文件将使用上一个项目的链接数据来创建,但我没有花了几天时间进行研究和测试后,发现了任何方法可以做到这一点。
这是我的应用当前最终想要的布局的外观:Q1,这是我提到的不同Q1-4视图的预览:Q1-4
我知道很多东西,所以让我更深入地解释:我想在“ Q1”(如上所示)中包含一个以“第1周”开头的列表,然后单击添加按钮,我希望它添加一个“第2周”,依此类推,直到10周。达到10周后,我希望用户必须更改为其他视图“ Q2”,然后他们可以添加第11-20周,依此类推,直到Q4,将其限制为总共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)
}
}
}
答案 0 :(得分:0)
我不确定我是否理解正确,但是我举了一个非常简单的示例来回答您的头衔问题
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)
}
}