繁体   English   中英

SwiftUI 使用 Stepper 动态添加/删除 TextField

[英]SwiftUI dynamically add/remove TextField with Stepper

大家好,我是 SwiftUI 的新手,我试图找到一种巧妙的方法来添加或删除 TextFields,当按下陡峭的加号或减号时。

我目前有

@State private var answers: [String] = ["", ""]
Stepper(onIncrement: {
    if(numberOfAnswers < 10){
        answers.append("")
        numberOfAnswers += 1
    }
    },
    onDecrement: {
        if(numberOfAnswers > 2){
        answers.removeLast()
        numberOfAnswers -= 1
        }
    }) {
ForEach(answers.indices, id: \.self) { index in
    TextField("Answer", text: $answers[index])
}

但是,当调用 onDecrement 时,这会导致 Index out of bounds 异常。 我尝试使用ForEach(answers)包装字符串以符合 Identifiable (在结构声明中使用@State ),但这会产生一个警告,指出该变量将不会被更新。

我尝试了此处发布的解决方案,但无济于事。

我不需要持久存储此结果,因为它将被传递给单独的 function,从而在按下按钮时调用 API。

对此的任何帮助将不胜感激。

这是固定的复制代码。 使用 Xcode 11.4 / iOS 13.4 测试

struct DemoView: View {
    @State var numberOfAnswers = 2
    @State private var answers: [String] = ["", ""]

    var body: some View {
        Stepper(onIncrement: {
            if(self.numberOfAnswers < 10){
                self.answers.append("")
                self.numberOfAnswers += 1
            }
        },
                onDecrement: {
                    if(self.numberOfAnswers > 2){
                        self.answers.removeLast()
                        self.numberOfAnswers -= 1
                    }
        }) {
            ForEach(Array(answers.enumerated()), id: \.0) { i, _ in
                TextField("Answer", text: self.$answers[i])
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM