Создание пользовательского интерфейса формы в SwiftUI - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь написать базовый c пользовательский интерфейс формы для захвата деталей о ресторане. Я буду фиксировать детали, такие как:

«ИМЯ», placeHolder: «Введите название ресторана», «ТИП», placeHolder: «Введите тип ресторана», «АДРЕС», placeHolder: «Заполните адрес ресторана »,« ТЕЛЕФОН », placeHolder:« Заполнить телефон ресторана »,« ОПИСАНИЕ », placeHolder:« Заполнить описание ресторана »,

Я разработал модель basi c TextField , стилизовал его, и так как мне придется повторно использовать этот стиль для всех записей в форме (как упомянуто выше), я решил поместить код в Struct в другой файл SwiftUI. До сих пор все в порядке, так как данные находятся в другом файле, я поражен повторным использованием этих Struct данных в ContentView. Любая помощь или руководство очень мне помогут.

Кроме того, возможно, глупый вопрос, но есть ли способ создать TextField без использования переменной @State?

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

1 Ответ

2 голосов
/ 13 марта 2020

Вы почти у цели. Вам просто нужно передать необходимые переменные в 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)
    }
}
...