【问题标题】:Update Value In TextField And Have Its Array Index Update Accordingly更新 TextField 中的值并相应更新其数组索引
【发布时间】:2021-09-20 05:19:51
【问题描述】:

我无法更新通过 for each 循环显示的数组中的值。这些值显示在文本字段中。

有问题的代码

struct EditItemView: View {


@State var recipeStep: [String]
@State var stepInfo: String = ""
@State var textFieldCount: Int = 1
@State var stepNumber: [Int]
@State var recordsCount = 2

var body: some View {
    //a bunch of code between here and the list, does not apply
    VStack {
        List {
                ForEach(0..<recipeStep.count, id: \.self) { index in
                            HStack {
                                Text(String(stepNumber[index]) + ".").bold()
                                EditorViewEdit(container: self.$recipeStep, index: index, text: recipeStep[index])
                            }
                }.onDelete { (indexSet) in
                    stepNumber.remove(atOffsets: indexSet)
                    recipeStep.remove(atOffsets: indexSet)
                }

ForEach 循环中的以下代码是我用来使列表中的每个文本字段可编辑的代码(因为我不知道有任何其他方法可以使文本字段在列表中工作):

EditorViewEdit(container: self.$recipeStep, index: index, text: recipeStep[index])

上面代码中引用的结构体如下:

struct EditorViewEdit : View {
var container: Binding<[String]>
var index: Int

@State var text: String

var body: some View {
    TextField("", text: self.$text, onCommit: {
        self.container.wrappedValue[self.index] = self.text
    })
}

}

问题

如何更改 foreach 循环中的文本字段并相应更新 @State var recipeStep: [String] 中的值?例如,我在 for each 循环中编辑了第一个 TextField - 如何使用新值更新数组中的索引 0?

【问题讨论】:

    标签: arrays swift swiftui textfield


    【解决方案1】:

    有很多方法可以在 foreach 循环中更改文本字段 并在 recipeStep 中有它的价值。试试这样的:

    import SwiftUI
    
    @main
    struct TestApp: App {
        var body: some Scene {
            WindowGroup {
                ContentView()
            }
        }
    }
    
    struct ContentView: View {
        @State var recipeStep = ["recipe step 1","recipe step 2","recipe step 3"]
        var body: some View {
            VStack {
                EditItemView(recipeStep: $recipeStep)
                Text(recipeStep.description) 
            }
        }
    }
    
    struct EditItemView: View {
        @Binding var recipeStep: [String]
        
        var body: some View {
            VStack {
                List {
                    ForEach(recipeStep.indices, id: \.self) { index in
                        HStack {
                            Text(String(index) + ".").bold().foregroundColor(.red)
                            TextField("Recipe step", text: $recipeStep[index])
                        }
                    }.onDelete { indexSet in
                        recipeStep.remove(atOffsets: indexSet)
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-22
      • 1970-01-01
      • 2018-02-22
      • 2019-02-16
      • 1970-01-01
      • 2018-07-01
      • 2015-09-25
      • 2020-11-27
      • 2019-09-01
      相关资源
      最近更新 更多