- Published on
Klaviatura boshqaruvi va @FocusState
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Login sahifasini oching β birinchi maydonni toldirdingiz, "Next" bosdingiz, klaviatura parol maydoniga o'tdi. Bu @FocusState. Foydalanuvchi nomini to'ldirdi, "Continue" bosdi β klaviatura yopildi va keyingi ekran ochildi. Bu ham @FocusState.
Focus β foydalanuvchining diqqati qaysi maydondaligi. @FocusState dasturingizdan fokusni boshqarish imkonini beradi: klaviaturani ochish, yopish, maydonlar orasida o'tish β barchasi kod bilan.
Agar bitta maydon bo'lsa Bool ishlating. Bir nechta maydon bo'lsa enum ishlating β har bir holat bitta maydonga to'g'ri keladi.
Focus patternlari
Bitta maydon uchun Bool @FocusState
@FocusState private var ismFaol: Bool
TextField("Ism", text: $ism)
.focused($ismFaol)
// Dasturiy ravishda focus qo'yish
Button("Maydonga o'tish") {
ismFaol = true
}
Klaviatura yopishni .toolbar orqali
TextField("Izoh", text: $izoh)
.focused($izohFaol)
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Spacer()
Button("Yopish") {
izohFaol = false
}
}
}
Klaviatura ustida "Yopish" tugmasi qo'yadi β uzun form va ko'p qatorli matn uchun qulay.
Muhim:
@FocusStatefaqat simulyator yoki haqiqiy qurilmada sinab ko'rilganda to'g'ri ishlaydi. Xcode canvas preview da klaviatura chiqmaydi va focus holat o'zgarishlarining ko'rinadigan ta'siri yo'q. Bu dars uchun klaviatura xatti-harakatini har doim simulyatorda sinab ko'ring.
Tezkor ma'lumotnoma
| Sintaksis | Vazifasi |
|---|---|
@FocusState private var faol: Bool | Bitta maydon focus holati |
@FocusState private var maydon: MaydOn? | Bir nechta maydon orasida focus |
.focused($faol) | Bool @FocusState-ga ulash |
.focused($maydon, equals: .ism) | Enum @FocusState-ga ulash |
faol = true | Klaviaturani dasturiy ochish |
faol = false / maydon = nil | Klaviaturani dasturiy yopish |
.onAppear { faol = true } | Sahifa ochilganda avtomatik focus |
.submitLabel(.next) | Return tugmasini "Next" qilish |
Topshiriq: ro'yxatdan o'tish formi
Ism, Familiya, Email, Parol β to'rtta TextField/SecureField yarating. Enum @FocusState bilan maydonlar orasida ketma-ket o'tishni sozlang (Next tugmasi). Oxirgi maydonda Return bosilganda klaviatura yopilsin. Sahifa ochilganda ism maydoniga avtomatik focus qo'ying.