SwiftUI如何创建一个按钮,将项目添加到包含导航链接的列表中
我从来没有做过这方面的文章,所以希望这是正确的设置 我是swift新手,我想创建一个按钮,将一个新项目添加到一个列表中,该列表包含一个导航链接,指向一个文件,该文件将使用以前项目中的链接数据创建,在花了几天的时间进行研究和测试后,我还没有找到任何方法来实现这一点 这就是我的应用程序当前的布局,我想在最后:,这里是我提到的不同Q1-4视图的预览: 我知道很多,所以让我更深入地解释一下:我想在所谓的“Q1”(如上所示)中有一个以“第1周”开头的列表,当您单击“添加”按钮时,我希望它添加一个“第2周”,以此类推,最多10周。一旦你达到10周,我希望用户必须更改为不同的视图“Q2”,然后他们可以添加第11-20周,以此类推,直到第4季度,这将总共限制为40周。我希望每周包含一个指向新视图的导航链接;但是,我还希望在创建新的一周时,将上一周的数据结转过来,这样用户就不必手动输入上一周的数据 我知道如何通过使用JSON文件来处理这些数字,正如我所看到的教程,但是,我不认为这有什么意义,因为我只需要1-40个星期的数字,但我似乎无法让它与数组或任何东西一起工作。我知道我可以使用@EnvironmentObject从其他页面获取所需的数据,但我也不确定如何设置。除此之外,我被卡住了!这是我的密码:SwiftUI如何创建一个按钮,将项目添加到包含导航链接的列表中,swiftui,swiftui-list,Swiftui,Swiftui List,我从来没有做过这方面的文章,所以希望这是正确的设置 我是swift新手,我想创建一个按钮,将一个新项目添加到一个列表中,该列表包含一个导航链接,指向一个文件,该文件将使用以前项目中的链接数据创建,在花了几天的时间进行研究和测试后,我还没有找到任何方法来实现这一点 这就是我的应用程序当前的布局,我想在最后:,这里是我提到的不同Q1-4视图的预览: 我知道很多,所以让我更深入地解释一下:我想在所谓的“Q1”(如上所示)中有一个以“第1周”开头的列表,当您单击“添加”按钮时,我希望它添加一个“第2周”
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)
}
}