Я никогда не делал постов по этому вопросу раньше, так что, надеюсь, это настроено правильно.
Я новичок в 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)
}
}
}