SwiftUI динамически добавляет / удаляет TextField с помощью Stepper
Привет всем, я новичок в SwiftUI и пытаюсь найти удобный способ добавить или удалить текстовые поля при нажатии плюса или минуса более крутого.
У меня сейчас есть
@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. Я попытался обернуть String в соответствии с Identifiable (с@State
внутри объявления структуры), используя ForEach(answers)
однако это вызывает предупреждение о том, что переменная не будет обновлена.
Я пробовал размещенные здесь решения, но безрезультатно.
Мне не нужно постоянно сохранять результат этого, так как он будет передан отдельной функции, выполняющей вызов API при нажатии кнопки.
Любая помощь для этого будет очень признательна.
1 ответ
Вот исправленный реплицированный код. Протестировано с 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])
}
}
}
}