SwiftUI – Form
Qué es Form
El componente Form
es similar al componente List
, por lo que permite mostrar un listado vertical de elementos pero con estética de formulario nativo del sistema operativo.
El componente Form
modifica los comportamientos de otros componentes de SwiftUI
, como en el caso de Picker
, donde cambia el modo de selección de los elementos (en este caso es obligatorio incluir el componente Form
dentro de un NavigationView
para que funcione). No tiene un componente equivalente en UIKit.
Aquí puedes consultar la documentación oficial.
El componente Form
tiene un único inicializador con un ViewBuilder
donde se deben incluir todos los elementos que queramos mostrar en el formulario. Cada vista que se incluya en el formulario corresponderá a una nueva row en el listado, pudiendo incluir el componente Section
para crear secciones dentro de Form
.
struct ContentView: View { let itemsPicker = ["Sevilla", "Cádiz", "Huelva", "Córdoba", "Málaga", "Granada", "Jaén", "Álmería"] @State private var textFieldSelection: String = "" @State private var pickerSelection: String = "Sevilla" @State private var sliderSelection: Double = 50 @State private var colorSelection: Color = .red @State private var datePickerSelection: Date = Date() @State private var toggleSelection: Bool = true var body: some View { NavigationView { Form { Section(header: Text("First section")) { Text("Hello, World!") TextField("Select text", text: $textFieldSelection) Slider(value: $sliderSelection, in: 0...100) Picker("Select province", selection: $pickerSelection) { ForEach(itemsPicker, id: .self) { Text($0) } }.navigationBarTitleDisplayMode(.inline) } Section(header: Text("Second section")) { ColorPicker("Select Color", selection: $colorSelection) DatePicker("Select date", selection: $datePickerSelection) Toggle("Enabled", isOn: $toggleSelection) Button("Done") { //Do something } .disabled(!toggleSelection) } .listRowBackground(Color.yellow.opacity(0.3)) Section() { HStack { Text("Version") Spacer() Text("1.0.0") } } } .navigationBarTitle("Form", displayMode: .automatic) .navigationColor(background: UIColor(red: 31/255, green: 155/255, blue: 222/255, alpha: 1), title: .white) } } }
Modificadores comunes para Form
El componente Form
comparte los mismos métodos de personalización que el componente View
y pueden ser consultados en este enlace.
También se comporta de forma similar al componente List
por lo que algunos de sus modificadores afectan a la personalización visual de Form
.
listRowBackground
Este modificador se debe aplicar a las celdas del componente List
. Si se aplica sobre Form
no tiene ningún efecto. Permite modificar el color de fondo de toda la celda. Para este caso el modificador background
no nos sirve ya que pondría el color de fondo al componente pero no a la celda.
Form { Section() { Text("Hello, World!") .listRowBackground(Color.red.opacity(0.3)) HStack { Text("Version") Spacer() Text("1.0.0") } Button("Done") { //Do something } } .listRowBackground(Color.yellow.opacity(0.3)) }
Ejemplo
Puedes encontrar este ejemplo en https://github.com/SDOSLabs/SwiftUI-Test bajo el apartado List.
Rafael Fernández,
iOS Tech Lider