如果在同一页面视图中按下按钮,如何让按钮添加文本字段?

问题描述 投票:0回答:1

我在编码此视图时遇到问题,因此我希望能够按加号按钮,然后在同一页面中添加另一个练习。

here  here enter image description here

我使用了这段代码,但它说('VStack'初始化程序的结果未使用)

Button(action: {
   
    VStack{
     HStack {
      Text("Exercise Name").bold()
      TextField("EX: Narrow Stance Leg Press", text: .constant("")).textFieldStyle(.roundedBorder)
     }
     ZStack{
    
      HStack {
    Spacer()
    Picker("Number of Sets", selection: $selectedNumber){
     ForEach(1...10, id: \.self) { number in
      Text("\(number)")
      
     }
    }.frame(width: 102.0, height: 25.0)
      }
      HStack {
    
    Text("Number of sets:").bold()
    Spacer()
    RoundedRectangle(cornerRadius: 13).stroke(.gray).frame(width: 133,height: 25)
      }
     }
     
     ZStack{
    
      HStack {
    Spacer()
    Picker("Number of reps", selection: $selectedNumber2){
     ForEach(1...20, id: \.self) { number in
      Text("\(number)")
      
     }
    }.frame(width: 102.0, height: 25.0)
      }
      HStack {
    
    Text("Number of reps:").bold()
    Spacer()
    RoundedRectangle(cornerRadius: 13).stroke(.gray).frame(width: 133,height: 25)
      }
     }

    }
    
   }) {
    ZStack{
     Text("+").bold()
     RoundedRectangle(cornerRadius: 13).stroke(.gray).frame(width: 133,height: 25)
    }

正如我所说,我想按加号,然后再次添加相同的块(练习名称、组数、次数),以便用户添加另一个练习。

button swiftui
1个回答
0
投票

您将需要一个

struct
来保存数据,以便您可以更新,还需要一个
Array
以便您可以创建任意数量的项目,示例如下:

import SwiftUI


    struct Exercise: Identifiable {
        let id = UUID()
        var name: String = ""
        var sets: Int = 1
        var rep: Int = 1
        
    }

    struct ExerciseView: View {
        
        @State private var exercises: [Exercise] = [Exercise()]
        
        var body: some View {
            
            VStack {
                
                ForEach($exercises) { $item in
                    ExerciseDetailView(exercise: $item)}
                
                Spacer()
                
                Button("+") {
                    exercises.append(Exercise())
                }
                .buttonStyle(.borderedProminent)
            }
            .padding()
        }
    }


    struct ExerciseDetailView: View {
        
        @Binding var exercise: Exercise
        
        var body: some View {
            
            VStack{
                HStack {
                    Text("Exercise Name").bold()
                    TextField("EX: Narrow Stance Leg Press", text: $exercise.name).textFieldStyle(.roundedBorder)
                }
                ZStack{
                    
                    HStack {
                        Spacer()
                        Picker("Number of Sets", selection: $exercise.sets){
                            ForEach(1...10, id: \.self) { number in
                                Text("\(number)")
                                
                            }
                        }.frame(width: 102.0, height: 25.0)
                    }
                    HStack {
                        
                        Text("Number of sets:").bold()
                        Spacer()
                        RoundedRectangle(cornerRadius: 13).stroke(.gray).frame(width: 133,height: 25)
                    }
                }
                
                ZStack{
                    
                    HStack {
                        Spacer()
                        Picker("Number of reps", selection: $exercise.rep){
                            ForEach(1...20, id: \.self) { number in
                                Text("\(number)")
                                
                            }
                        }.frame(width: 102.0, height: 25.0)
                    }
                    HStack {
                        
                        Text("Number of reps:").bold()
                        Spacer()
                        RoundedRectangle(cornerRadius: 13).stroke(.gray).frame(width: 133,height: 25)
                    }
                }
            }
        }
    }

© www.soinside.com 2019 - 2024. All rights reserved.