Foreach 中的 Al TextFields 在 SwiftUI 中同时输入
Al TextFields in Foreach type simultaneously in SwiftUI
从上次 post 开始,我决定创建一个 table,如下所示。但是,当我在一个文本字段中键入内容时,同一个 ForEach 中的所有其他文本字段都会通过相同的输入。有什么我可以做的,让每个文本字段都有自己的实体吗?
另外,当我在 1 视图中有一些这样的内容时,这仍然是一个好的解决方案吗?就太多的 Spacer 和 VStack 而言,这是否太多了?
如何单独跟踪来自文本字段的所有这些输入以存储在 coreData 中?
谢谢,我很感激任何类型的建议。
亲切的问候
import SwiftUI
struct SwiftUIView: View {
@State var B: String = ""
@State var C: String = ""
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 22)
.fill(Color(.systemGray5))
.frame(width: 400, height: 130, alignment: .center)
VStack (alignment: .leading){
HStack {
Text("A")
.fontWeight(.bold)
Spacer()
ForEach(1..<6) { i in
Text("\(i)")
.fontWeight(.bold)
}
.frame(width: 50)
}
HStack {
Text("B")
Spacer()
ForEach(1..<6) { i in
TextField("", text: $B)
.background(
VStack {
Spacer()
Color
.primary
.frame(height: 1)
}
)
.frame(width: 50, alignment: .trailing)
}
}
HStack {
Text("C")
Spacer()
ForEach(1..<6) { i in
TextField("", text: $C)
.background(
VStack {
Spacer()
Color
.primary
.frame(height: 1)
}
)
.frame(width: 50, alignment: .trailing)
}
}
}
.frame(width: 350, height: 100, alignment: .center)
}
}
}
您在每个 ForEach
中为 TextFields
使用了相同的变量。您需要使用一些东西的数组,并将 ForEach
键入数组。这是您的代码的简化版本。请注意“B”如何在每个 TextField
中重复您的输入,而“C”却没有?区别在于“C”中的每个 TextField
都在访问自己的存储空间。
struct SwiftUIView: View {
@State var B: String = ""
@State var C: [DemoText] = [DemoText(value: ""), DemoText(value: "")]
var body: some View {
VStack (alignment: .leading){
HStack {
Text("B")
Spacer()
ForEach(0..<2) { _ in
TextField("", text: $B)
.background(Color.gray)
}
}
HStack {
Text("C")
Spacer()
ForEach($C) { $element in
TextField("", text: $element.value)
.background(Color.gray)
}
}
}
}
}
struct DemoText: Identifiable {
let id = UUID()
var value: String
}
从上次 post 开始,我决定创建一个 table,如下所示。但是,当我在一个文本字段中键入内容时,同一个 ForEach 中的所有其他文本字段都会通过相同的输入。有什么我可以做的,让每个文本字段都有自己的实体吗?
另外,当我在 1 视图中有一些这样的内容时,这仍然是一个好的解决方案吗?就太多的 Spacer 和 VStack 而言,这是否太多了?
如何单独跟踪来自文本字段的所有这些输入以存储在 coreData 中?
谢谢,我很感激任何类型的建议。 亲切的问候
import SwiftUI
struct SwiftUIView: View {
@State var B: String = ""
@State var C: String = ""
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 22)
.fill(Color(.systemGray5))
.frame(width: 400, height: 130, alignment: .center)
VStack (alignment: .leading){
HStack {
Text("A")
.fontWeight(.bold)
Spacer()
ForEach(1..<6) { i in
Text("\(i)")
.fontWeight(.bold)
}
.frame(width: 50)
}
HStack {
Text("B")
Spacer()
ForEach(1..<6) { i in
TextField("", text: $B)
.background(
VStack {
Spacer()
Color
.primary
.frame(height: 1)
}
)
.frame(width: 50, alignment: .trailing)
}
}
HStack {
Text("C")
Spacer()
ForEach(1..<6) { i in
TextField("", text: $C)
.background(
VStack {
Spacer()
Color
.primary
.frame(height: 1)
}
)
.frame(width: 50, alignment: .trailing)
}
}
}
.frame(width: 350, height: 100, alignment: .center)
}
}
}
您在每个 ForEach
中为 TextFields
使用了相同的变量。您需要使用一些东西的数组,并将 ForEach
键入数组。这是您的代码的简化版本。请注意“B”如何在每个 TextField
中重复您的输入,而“C”却没有?区别在于“C”中的每个 TextField
都在访问自己的存储空间。
struct SwiftUIView: View {
@State var B: String = ""
@State var C: [DemoText] = [DemoText(value: ""), DemoText(value: "")]
var body: some View {
VStack (alignment: .leading){
HStack {
Text("B")
Spacer()
ForEach(0..<2) { _ in
TextField("", text: $B)
.background(Color.gray)
}
}
HStack {
Text("C")
Spacer()
ForEach($C) { $element in
TextField("", text: $element.value)
.background(Color.gray)
}
}
}
}
}
struct DemoText: Identifiable {
let id = UUID()
var value: String
}