Published on

TextField va SecureField

Authors

HΠ°Ρ€ qanday ilovani oching β€” Login, Qidiruv, Ro'yxatdan o'tish β€” va siz darhol matn kiritish maydonlarini topasiz. SwiftUI-da 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