我在整理一个应用程序供应商的数据输入表。为了保存时间并提高编码效率,我将许多更标准的布局放在它们自己的结构中,我称之为示例。问题是,我希望能够将人们在示例的文本字段部分中写下的内容:
1.将它们传递到一个屏幕上,该屏幕可以预览它们的信息对客户的显示效果
1.把它们放到数据库里
问题是我不知道如何引用变量,因为我相信因为它们都是相同结构的副本,所以文本字段具有相同的变量名。
这里有一个例子供参考:
下面是我创建的一个包含文本字段、标题和可选副标题的结构,称为DataFieldView()
struct DataFieldView: View {
var title: String = ""
var subtitle: String?
var textEnterText: String = ""
var dataVar: String = ""
@State var changedText: Bool = false
@State var enteredText: String = ""
var body: some View {
VStack(alignment: .leading) {
Text(title)
.font(.title2)
.italic()
.padding(.leading, 10)
TextField(textEnterText, text: $enteredText)
.padding()
.frame(width: 350)
.background(Color(red: 0.8, green: 0.8, blue: 0.8))
.cornerRadius(10)
.foregroundColor(.black)
.font(.headline)
if subtitle != nil {
Text(subtitle!)
.font(.body)
.foregroundColor(Color(red: 0.3, green: 0.3, blue: 0.3))
.padding(.leading,10)
}
}
}
}
下面是输入表单的一部分,其中包含了DataFieldView()的许多示例。
struct EntryView: View {
@State var textFieldText: String = ""
@State var genContShow: Bool = true
var body: some View {
ScrollView {
//MARK: General and Contacts
VStack(alignment:.leading, spacing: 20) {
Text("General and Contacts")
.font(.title)
.multilineTextAlignment(.leading)
.padding(.bottom, 15)
if genContShow == true {
DataFieldView(title: "Name")
DataFieldView(title: "Email Address")
DataFieldView(title: "Address Line 1")
DataFieldView(title: "Address Line 2")
DataFieldView(title: "City")
DataFieldView(title: "State")
DataFieldView(title: "ZIP Code")
.padding(.bottom, 50)
}
}
}
}
}
我想把人们在DataFieldView()的每个示例的文本字段中键入的内容赋给他们自己的变量。但我却不知道该怎么称呼他们。
我尝试将这些示例传递到它们自己的变量中,但似乎不起作用。它只捕获文本字段第一次加载到屏幕上时的内容,很明显,因为它们是文本字段,所以我想在人们更新它们之后捕获其中的内容。
1条答案
按热度按时间whhtz7ly1#
要从
DataFieldView
获取输入的数据,您需要使用Binding
创建双向连接。您可以将enteredText
变量更改为Binding
类型(@Binding var enteredText: String
)。然后,您需要在ViewEntryView
中创建@State
变量来存储输入的值。例如:并将这些值传递给
DataFieldView
的属性:您可以通过在每个
DataFieldView
下面添加文本视图来检查属性是否更新值,例如: