Swift技术问题:多个TextField同步更新而非单个更新求助
解决TextField循环同步更新的问题
问题根源很明确:你所有的TextField都绑定到同一个question和answer变量,不管循环到哪个索引,用的都是同一个数据源,自然输入时所有对应文本框会同步变化。
修复步骤:
创建独立的数据模型
定义一个遵循Identifiable的结构体,用来单独存储每组问答内容:struct Flashcard: Identifiable { let id = UUID() var question: String = "" var answer: String = "" }改用数组存储多组数据
将原来的单个字符串变量替换为Flashcard类型的数组,初始化时生成对应数量的实例:@State var numberOfFlashcards: Int = 2 @State private var flashcards: [Flashcard] = Array(repeating: Flashcard(), count: 2)修改循环绑定逻辑
遍历flashcards数组,直接绑定到每个元素的question和answer属性:ForEach($flashcards) { $flashcard in // 获取当前卡片的索引并显示序号 if let index = flashcards.firstIndex(where: { $0.id == flashcard.id }) { Text("Flashcard \(index + 1)") } VStack{ TextField(text: $flashcard.question) { Text("Enter question") } TextField(text: $flashcard.answer) { Text("Enter answer") } } }动态调整数组数量(可选)
如果需要根据numberOfFlashcards的变化自动增减卡片,可以添加onChange修饰符:.onChange(of: numberOfFlashcards) { newValue in let currentCount = flashcards.count if newValue > currentCount { // 添加新卡片 flashcards.append(contentsOf: Array(repeating: Flashcard(), count: newValue - currentCount)) } else if newValue < currentCount { // 删除多余卡片 flashcards.removeLast(currentCount - newValue) } }
这样修改后,每个TextField都绑定到独立的数据源,输入时只会更新当前卡片的内容,不会影响其他卡片。
内容的提问来源于stack exchange,提问作者omoge
相关产品推荐
相关产品推荐

