0

これについてこれまで投稿したことがないので、正しく設定されていることを願っています。

Swift は初めてで、以前のアイテムからリンクされたデータで作成されるファイルへのナビゲーション リンクを含むリストに新しいアイテムを追加するボタンを作成したいのですが、方法が見つかりませんでした。調査とテストに数日を費やした後、これを行う。

これは、最終的に必要なレイアウトの現在のアプリの外観です: Q1、ここに私が言及したさまざまな Q1-4 ビューのプレビューがあります: Q1-4

たくさんあることはわかっているので、もっと詳しく説明しましょう: 「第 1 週」で始まる「第 1 四半期」(上記参照) に含まれるリストが必要で、追加ボタンをクリックすると、 「第 2 週」などを 10 週まで追加してほしい。10 週に達したら、ユーザーに別のビュー「Q2」に変更してもらいたいと思います。これにより、第 11 週から第 20 週まで追加でき、合計で 40 週に制限されます。毎週、新しいビューへのナビゲーション リンクを含めたい。ただし、新しい週を作成するとすぐに前の週のデータを引き継ぐ必要があるため、ユーザーは前の週のデータを手動で入力する必要はありません。

数値にJSONファイルを使用してこれを行う方法を知っています. -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)
        }
    }
}
4

1 に答える 1