Published on

TextField va SecureField

Authors

Hар qanday ilovani oching — Login, Qidiruv, Ro'yxatdan o'tish — va siz darhol matn kiritish maydonlarini topasiz. SwiftUIda oddiy matn kiritish uchun TextField, parol va maxfiy ma'lumotlar uchun SecureField. Ularning vazifasi bir xil: foydalanuvchi kiritgan matnni @State o'zgaruvchisiga ulash.

TextField ikkita narsa oladi: placeholder matn (bo'sh maydonda ko'rinadigan izoh) va $binding. Foydalanuvchi terishi bilan binding @State o'zgaruvchisini yangilaydi — bu erda hech qanday tugma bosish shart emas.

SecureField xuddi shunday ishlaydi, lekin kiritilgan belgilarni nuqtalar bilan yashiradi. Clipboard-dan nusxalashni ham oldini oladi. Parol maydonlari uchun har doim SecureField ishlating.

Swift
ContentView.swift
import SwiftUI struct ContentView: View { // @State o'zgaruvchilari — TextField va SecureField shu yerga yozadi @State private var email = "" @State private var parol = "" var body: some View { VStack(spacing: 16) { // TextField: placeholder + $binding TextField("Email", text: $email) .textFieldStyle(.roundedBorder) // Email uchun @ belgisi qulay joylashgan klaviatura .keyboardType(.emailAddress) // Email manzilda avtoto'g'rilash keraksiz .autocorrectionDisabled() .textInputAutocapitalization(.never) // SecureField: matnni nuqtalar bilan yashiradi SecureField("Parol", text: $parol) .textFieldStyle(.roundedBorder) Button("Kirish") { print("Email: \(email)") } .buttonStyle(.borderedProminent) .disabled(email.isEmpty || parol.isEmpty) } .padding() } }

TextField modifikatorlari

.keyboardType()

// Raqam klaviaturasi
TextField("Telefon", text: $telefon)
.keyboardType(.numberPad)

// Email klaviaturasi — @ belgisi qulay
TextField("Email", text: $email)
.keyboardType(.emailAddress)

// URL klaviaturasi
TextField("Veb-sayt", text: $url)
.keyboardType(.URL)

.submitLabel() va .onSubmit

TextField("Qidirish", text: $sorov)
// Return tugmasini "Search" deb ko'rsatadi
.submitLabel(.search)
// Return bosilganda ishlaydigan closure
.onSubmit {
    qidirish(sorov)
}

Ko'p qatorli TextField

// axis: .vertical matn maydonini kerak bo'lganda kengaytiradi
TextField("Bio", text: $bio, axis: .vertical)
.lineLimit(4, reservesSpace: true)
.textFieldStyle(.roundedBorder)

Keng tarqalgan xato: text: $email da o'zgaruvchi nomidan oldin $ belgisini unutish. Dollar belgisisiz siz binding emas — satrning joriy qiymatini uzatyapsiz. SwiftUI sizga kompilyatsiya xatosi ko'rsatadi, lekin oqimda bo'lganingizda buni e'tiborsiz qoldirish oson. $ aloqani ikki tomonlama qiladigan narsa.

Qo'shimcha variantlar

.textContentType()

Bu modifier iOS-ga maydon qanday turdagi ma'lumot saqlashini bildiradi. iOS bu ma'lumotdan Keychain, Kontaktlar va kuchli parol generatoridan AutoFill taklif qilish uchun foydalanadi. Kichik qo'shimcha — lekin ilovangizni professional ko'rinishga keltiradi va foydalanuvchi uchun ishni osonlashtiradi.

// Tells iOS this is an email field — enables AutoFill from Contacts
TextField("Email", text: $email)
.textContentType(.emailAddress)

// Tells iOS this is a new password — triggers strong password suggestion
SecureField("Create password", text: $password)
.textContentType(.newPassword)

// Tells iOS this is an existing password — enables Keychain AutoFill
SecureField("Password", text: $password)
.textContentType(.password)

.autocapitalization()

Email, foydalanuvchi nomi, parol va URL uchun .never ishlating. Ism va sarlavhalar uchun .words. Standart .sentences bepul matn maydonlari va bio uchun mos.

// No autocapitalisation — good for usernames and emails
TextField("Username", text: $username)
.textInputAutocapitalization(.never)

// Capitalise the first letter of each word — good for names
TextField("Full name", text: $name)
.textInputAutocapitalization(.words)

// Capitalise every sentence (the default)
TextField("Bio", text: $bio)
.textInputAutocapitalization(.sentences)

Tezkor ma'lumotnoma

ModifikatorVazifasi
.textFieldStyle(.roundedBorder)Yumaloq burchakli chegara uslubi
.keyboardType(.emailAddress)Email klaviaturasi
.keyboardType(.numberPad)Raqam klaviaturasi
.autocorrectionDisabled()Avtoto'g'rilashni o'chiradi
.textInputAutocapitalization(.never)Bosh harfni avtomatik qo'yishni o'chiradi
.submitLabel(.done)Return tugmasi matni: .done, .go, .search, .send
.onSubmit { }Return bosilganda ishlaydigan closure

Topshiriq: login ekrani

Email va parol uchun TextField/SecureField yarating. "Kirish" tugmasini ikkala maydon to'ldirilgunga qadar .disabled() qiling. .keyboardType(.emailAddress) va .autocorrectionDisabled() qo'shing. Simulyatorda sinab ko'ring.

Buy mea coffee