在 SwiftUI 中创建表单 UI
Creating Form UI in SwiftUI
我正在尝试编写一个基本的 UI 表单来捕获有关餐厅的详细信息。我将捕获以下详细信息:
"NAME",占位符:"Fill in the restaurant name",
"TYPE",占位符:"Fill in the restaurant type",
"ADDRESS",占位符:"Fill in the restaurant address",
"PHONE",占位符:"Fill in the restaurant phone",
"DESCRIPTION",占位符:"Fill in the restaurant description",
我已经设计了基本的 TextField
模型,并对其进行了风格化,因为我将不得不在表单中的所有条目中重复使用这种风格(如上所述),我决定将代码放在 Struct
在不同的 SwiftUI 文件中。到这里为止一切都很好,因为数据在不同的文件中,我对在 ContentView
中重新使用这个 Struct
数据感到震惊。任何帮助或指导都会对我有很大帮助。
此外,这可能是一个愚蠢的问题,但是有没有什么方法可以在不使用 @State 变量的情况下创建 TextField
?
import Foundation
import SwiftUI
struct LabelTextField: View {
@State private var restaurant: String = ""
var label: String
var placeHolder: String
var body: some View {
VStack(alignment: .leading){
Text("NAME")
.font(.headline)
TextField("Enter Restaurant Name", text: $restaurant)
.padding(.all)
.background(Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0))
.cornerRadius (5.0)
} .padding(.horizontal, 15)
}
}
你快到了。您只需将所需的变量传递给 LabelTextField。而 TextField 需要一个 Binding 变量。我已经更新了您的代码以按预期运行。希望这可以帮助。编码愉快。
struct ContentView: View {
@State private var restaurant: String = ""
var body: some View {
VStack {
LabelTextField(label: "NAME", placeHolder: "Fill in the restaurant name", restaurant: $restaurant)
Text("Restaurant name - \(restaurant)")
}
}
}
struct LabelTextField: View {
var label: String
var placeHolder: String
@Binding var restaurant: String
var body: some View {
VStack(alignment: .leading) {
Text(label)
.font(.headline)
TextField(placeHolder, text: $restaurant)
.padding(.all)
.background(Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0))
.cornerRadius (5.0)
}
.padding(.horizontal, 15)
}
}
我正在尝试编写一个基本的 UI 表单来捕获有关餐厅的详细信息。我将捕获以下详细信息:
"NAME",占位符:"Fill in the restaurant name", "TYPE",占位符:"Fill in the restaurant type", "ADDRESS",占位符:"Fill in the restaurant address", "PHONE",占位符:"Fill in the restaurant phone", "DESCRIPTION",占位符:"Fill in the restaurant description",
我已经设计了基本的 TextField
模型,并对其进行了风格化,因为我将不得不在表单中的所有条目中重复使用这种风格(如上所述),我决定将代码放在 Struct
在不同的 SwiftUI 文件中。到这里为止一切都很好,因为数据在不同的文件中,我对在 ContentView
中重新使用这个 Struct
数据感到震惊。任何帮助或指导都会对我有很大帮助。
此外,这可能是一个愚蠢的问题,但是有没有什么方法可以在不使用 @State 变量的情况下创建 TextField
?
import Foundation
import SwiftUI
struct LabelTextField: View {
@State private var restaurant: String = ""
var label: String
var placeHolder: String
var body: some View {
VStack(alignment: .leading){
Text("NAME")
.font(.headline)
TextField("Enter Restaurant Name", text: $restaurant)
.padding(.all)
.background(Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0))
.cornerRadius (5.0)
} .padding(.horizontal, 15)
}
}
你快到了。您只需将所需的变量传递给 LabelTextField。而 TextField 需要一个 Binding 变量。我已经更新了您的代码以按预期运行。希望这可以帮助。编码愉快。
struct ContentView: View {
@State private var restaurant: String = ""
var body: some View {
VStack {
LabelTextField(label: "NAME", placeHolder: "Fill in the restaurant name", restaurant: $restaurant)
Text("Restaurant name - \(restaurant)")
}
}
}
struct LabelTextField: View {
var label: String
var placeHolder: String
@Binding var restaurant: String
var body: some View {
VStack(alignment: .leading) {
Text(label)
.font(.headline)
TextField(placeHolder, text: $restaurant)
.padding(.all)
.background(Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0))
.cornerRadius (5.0)
}
.padding(.horizontal, 15)
}
}