Good afternoon everyone.
Guys, tell me how it is possible to edit Еextfield, for example, "date of birth"? for example, to apply a "dataSeparator" or other modifier?
import SwiftUI
struct Tourist {
var firstName: String
var lastName: String
var dateBirth: String
var citizenship: String
var numberPassport: String
var validityPeriodPassport: String
}
extension String {
func dataSeparator() -> String {
var currentText = self
let character = "/" as Character
if self.count > 2 {
currentText.insert(
character, at:
currentText.index(currentText.startIndex, offsetBy: 2)
)
}
return currentText
}
}
class CardTouristViewModel: ObservableObject {
@Published var tourist: Tourist = Tourist(firstName: "",
lastName: "",
dateBirth: "".dataSeparator(),
citizenship: "",
numberPassport: "",
validityPeriodPassport: "")
}
struct CardTourist: View {
@ObservedObject var turistVM: CardTouristViewModel = CardTouristViewModel()
var title: String = ""
@State var isShow: Bool = false
var body: some View {
VStack(spacing: 0) {
ShowCardTourist(isShow: $isShow, title: title, action: {
DispatchQueue.main.async {
withAnimation(.easeInOut) {
self.isShow.toggle()
print(turistVM.tourist)
}
}
})
.padding(.bottom, isShow ? 17 : 0)
if isShow {
VStack(spacing: 8) {
TextFieldForTouristWithPlaceholder(textField: $turistVM.tourist.firstName,
title: "Имя")
TextFieldForTouristWithPlaceholder(textField: $turistVM.tourist.lastName,
title: "Фамилия")
TextFieldForTourist(textField: $turistVM.tourist.dateBirth,
title: "Дата рождения")
TextFieldForTourist(textField: $turistVM.tourist.citizenship,
title: "Гражданство")
TextFieldForTourist(textField: $turistVM.tourist.numberPassport,
title: "Номер загранпаспорта")
TextFieldForTourist(textField: $turistVM.tourist.validityPeriodPassport,
title: "Срок действия загранпаспорта")
}
}
}
.padding(.horizontal, 13)
.vLeading()
.padding(.vertical, 16)
.background(Color.white)
.cornerRadius(15)
}
}
struct ShowCardTourist: View {
@Binding var isShow: Bool
var title: String = ""
var action: () -> Void
var body: some View {
HStack(spacing: 0) {
Text(title)
.modifier(HeightModifier(size: 22, lineHeight: 120, weight: .medium))
.foregroundColor(.black)
.frame(maxWidth: .infinity, alignment: .leading)
Button(action: action) {
Image(systemName: "chevron.up")
.rotationEffect(.degrees(isShow ? 0 : 180))
}
.font(Font.system(size: 16))
.frame(width: 32, height: 32)
.foregroundColor(.c_0D72FF)
.background(Color.c_0D72FF_10)
.cornerRadius(6)
}
}
}
struct TextFieldForTouristWithPlaceholder: View {
@Binding var textField: String
@State var isValid: Bool = false
let title: String
var body: some View {
VStack(alignment: .leading, spacing: 0) {
Text(title)
.modifier(HeightModifier(size: 12, lineHeight: 120, weight: .regular))
.tracking(0.1)
.foregroundColor(.c_A9ABB7)
TextField("", text: $textField)
.modifier(HeightModifier(size: 16, lineHeight: 110, weight: .regular))
.tracking(0.075)
.foregroundColor(.c_14142B)
.textContentType(.name)
.tint(Color.black)
}
.padding(.horizontal, 16)
.vLeading()
.padding(.vertical, 10)
.background(isValid ? Color.c_EB5757_15 : Color.c_F6F6F9)
.cornerRadius(10)
}
}
struct TextFieldForTourist: View {
@Binding var textField: String
@State var isValid: Bool = false
let title: String
var body: some View {
VStack(alignment: .leading, spacing: 0) {
TextField(title, text: $textField)
.modifier(HeightModifier(size: 17,
lineHeight: 110,
weight: .regular))
.tracking(0.1)
.foregroundColor(.c_14142B)
.tint(.black)
}
.vLeadingAndBack(isValid)
}
}
extension View {
func vLeading() -> some View {
self.frame(maxWidth: .infinity, alignment: .leading)
}
func vLeadingAndBack(_ isColor: Bool) -> some View {
self
.padding(.horizontal, 16)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.vertical, 16)
.background(isColor ? Color.c_EB5757_15 : Color.c_F6F6F9)
.cornerRadius(10)
}
func solidBlackground() -> some View {
self
.padding(.horizontal, 16)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.vertical, 16)
.background(Color.c_F6F6F9)
.cornerRadius(15)
}
}
#if DEBUG
struct CardTourist_Previews: PreviewProvider {
static var previews: some View {
CardTourist()
}
}
#endif