You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中List内TextField输入时所有行文本框同步变更问题求助

解决SwiftUI List中TextField同步更新所有行的问题

问题根源

你当前所有TextField都绑定了同一个$count变量,导致输入任意一行的内容时,所有行的文本框都会同步变化。

解决方案

核心思路是给每行数据分配独立的绑定变量,具体步骤如下:

  1. 定义单行数据模型
    根据iOS版本选择对应的实现方式:
// iOS 17及以上(使用@Observable宏)
@Observable
struct Item {
    let id = UUID()
    var count: String = ""
}

// iOS 16及以下(使用ObservableObject)
class Item: ObservableObject {
    let id = UUID()
    @Published var count: String = ""
}
  1. 声明多行数据数组
    在视图中创建存储各行数据的数组:
// iOS 17+
@State private var items: [Item] = [Item(), Item(), Item()]

// iOS 16及以下
@State private var items: [Item] = [Item(), Item(), Item()]
  1. 遍历数组生成独立绑定的TextField
    循环数组时,让每个TextField绑定对应行的count属性:
// iOS 17+ 写法
List {
    ForEach($items) { $item in
        TextField("Count", text: $item.count)
            .multilineTextAlignment(.center)
            .frame(width:70, height: 15, alignment: .center)
            .textFieldStyle(PlainTextFieldStyle())
            .padding(4)
            .cornerRadius(3)
            .font(.system(size: 12))
    }
}

// iOS 16及以下写法
List {
    ForEach(items.indices, id: \.self) { index in
        TextField("Count", text: $items[index].count)
            .multilineTextAlignment(.center)
            .frame(width:70, height: 15, alignment: .center)
            .textFieldStyle(PlainTextFieldStyle())
            .padding(4)
            .cornerRadius(3)
            .font(.system(size: 12))
    }
}

修改后,每个TextField都绑定到对应行的独立数据属性,输入某一行内容时只会更新该行的文本框,不会影响其他行。

内容的提问来源于stack exchange,提问作者Khalid Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:05:16