En el desarrollo de aplicaciones con interfaces gráficas, es esencial manejar variables que faciliten el almacenamiento y actualización de datos, especialmente durante la edición de perfiles. En esta lección, nos enfocaremos en la implementación de variables utilizando el property wrapper llamado @State, que nos permitirá seguir y modificar cada variable según sea necesario.
¿Qué variables necesitamos?
Para nuestra pantalla de edición de perfil, necesitamos tres variables de tipo String:
correo: Se iniciará sin valor, es decir, como un string vacío.
contraseña: Similar al correo, comenzará sin ningún valor asignado.
nombre: Al igual que las anteriores, empezará vacía.
El uso del @State wrapper asegura que cualquier cambio en estos valores sea detectado y reflejado en la interfaz gráfica, mejorando la interactividad y dinamismo de nuestra aplicación.
Una parte crucial de nuestro formulario es la capacidad de actualizar los datos del usuario cuando se interactúa con la interfaz. Por este motivo, creamos una función sin parámetros denominada actualizarDatos. Por ahora, esta función simplemente imprimirá un mensaje indicando que se están guardando y recuperando los datos del usuario, dejándola lista para su futura implementación.
funcactualizarDatos(){print("Guardado o guardando y recuperando datos del usuario")}
¿Cómo estructurar la interfaz gráfica?
Nuestra interfaz se centrará en un diseño limpio y organizado. Empezaremos envolviendo todo en un VStack con propiedades de alineación a la izquierda y un padding horizontal de 42 puntos para asegurarnos de que todo se vea correctamente alineado y espacioso.
¿Cómo diseñar los campos de texto?
Los campos de texto consistirán en un TextField para el correo y el nombre, y un SecureField para la contraseña, cada uno con su propio placeholder y validaciones para asegurar la usabilidad.
Para asegurar que la contraseña no sea visible al ingresarla, utilizamos SecureField, mejorando así la privacidad del usuario:
SecureField("Introduce tu contraseña", text: $contraseña).foregroundColor(.white)
¿Cómo añadir un botón de acción?
El botón de acción, cual es el elemento que permitirá actualizar los datos, integra un diseño ya conocido con propiedades modificadas para que coincida con los estándares visuales de la aplicación:
Asegúrate de que cada elemento de la interfaz esté correctamente espaciado y que los colores y fuentes sean coherentes con el diseño general de la aplicación. Esto no solo mejorará la apariencia de tu aplicación, sino que también aumentará su usabilidad.
Embárcate con confianza en la programación de interfaces en Xcode y Swift, y recuerda que ajustar los detalles en la apariencia final puede marcar una gran diferencia en la presentación de tu proyecto. ¡Sigue aprendiendo y perfeccionando tus habilidades, el camino de la programación es vasto y lleno de oportunidades!
¿Por casualidad les pasa que al compilar arranca la vista a mitad de pantalla y al ingresar a otra y volver se acomoda en la parte superior? No se si es un problema del emulador o algo con el código..
Me pasa también. Mojave, iOS15 iphone12
Hice esta extensión para usarla como botón:
extension Text{ func borderBackgroundlessStyle()-> some View{ self.bold().foregroundColor(Color.white).frame(maxWidth:.infinity,alignment: center).padding(EdgeInsets(top:11,leading:18,bottom:11,trailing:18)).overlay(RoundedRectangle(cornerRadius:6.0).stroke(Color("dark_cyan"),lineWidth:1.0).shadow(radius:6))}}
Esto es como si fuera un componente visual, lo llamas cuando lo necesitas en pantalla y listo? y como le pasas el contenido si quieres que pueda variar algún texto??
otra practica para hacer un estilo reutilizable sería crear una estructura que adopte el protocolo ButtonStyle y después llamarla en la construcción del botón, algo así:
struct BorderBackgroundlessStyle:ButtonStyle{ func makeBody(configuration:Configuration)-> some View{ configuration.label.padding().background(Color(red:0,green:0,blue:0.5)).foregroundColor(.white).clipShape(Capsule())}}struct ContentView:View{varbody: some View{Button("Actualizar datos".uppercased()){ updateData
}.buttonStyle(BorderBackgroundlessStyle())}}
saben como quitar el estilo de link al texto de correo electronico? (Text("ejemplo@gmail.com") no me funciona ponerle el .foregroundColor(.white), tal vez porque detecta que es un correo, alguien le pasa lo mismo???
en lugar de utilizar foregroundColor, utiliza accentColor
También puedes concatenar así:
Text("ejemplo" + "@ " + "gmail...")
Una cosa, el color que uso Juan donde uso un rgb, no es mas que el Dark-Cian que ya teniamos, pero se le pasa un .opacity(0.5) lo mismo para los grises, y lo otro, para el color verde en los titulos de los textfield es cuando esta el textfield en onfocus, se cambia el foreground a verde, y en false a blanco
Seguimos repitiendo codigo .. recuerden SIEMPRE que esto en un trabajo NO se hace. Siempre se busca re-utilizar codigo, y desde un inicio ya se debe pensar en como re-utilizarlo.
Pequeño recordatorio que ahora los TextField tienen la propiedad label.
Para que les quede igual a FIGMA, pueden hacer lo siguiente