在SwiftUI中创建表单UI

在SwiftUI中创建表单UI,swift,swiftui,swift5,Swift,Swiftui,Swift5,我正在尝试编写一个表单的基本UI,以捕获有关餐厅的详细信息。我将捕捉以下细节: “名称”,占位符:“填写餐厅名称”, “类型”,占位符:“填写餐厅类型”, “地址”,占位符:“填写餐厅地址”, “电话”,占位符:“填写餐厅电话”, “说明”,占位符:“填写餐厅说明” 我设计了基本的TextField模型,并对其进行了样式化,因为我必须在表单中的所有条目中重复使用此样式(如上所述),所以我决定将代码放入另一个SwiftUI文件中的Struct。到目前为止,一切都很好,因为数据位于不同的文件中,我对

我正在尝试编写一个表单的基本UI,以捕获有关餐厅的详细信息。我将捕捉以下细节:

“名称”,占位符:“填写餐厅名称”, “类型”,占位符:“填写餐厅类型”, “地址”,占位符:“填写餐厅地址”, “电话”,占位符:“填写餐厅电话”, “说明”,占位符:“填写餐厅说明”

我设计了基本的
TextField
模型,并对其进行了样式化,因为我必须在表单中的所有条目中重复使用此样式(如上所述),所以我决定将代码放入另一个SwiftUI文件中的
Struct
。到目前为止,一切都很好,因为数据位于不同的文件中,我对在
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需要一个绑定变量。我已更新了您的代码,使其按预期运行。希望这有帮助。快乐编码

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)
    }
}

你就快到了。您只需要将所需的变量传递给LabelTextField。TextField需要一个绑定变量。我已更新了您的代码,使其按预期运行。希望这有帮助。快乐编码

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)
    }
}

你查过我的密码了吗。我的意思是它需要一个状态变量作为绑定类型传递给它。我理解。我从贴出的问题中选取了这些行。更新了答案。谢谢。我检查了代码,它工作得很完美。你检查过我的代码了吗。我的意思是它需要一个状态变量作为绑定类型传递给它。我理解。我从贴出的问题中选取了这些行。更新了答案。谢谢。我检查了代码,它工作得完美无缺。