- Published on
NavigationPath bilan dasturiy navigatsiya
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Hozirgacha navigatsiya foydalanuvchi nimadir tepishi tufayli sodir bo'ldi. Lekin kod navigatsiya qilishi kerak bo'lsa nima bo'ladi β foydalanuvchi tepishisiz? Biror narsa tugallangandan keyin avtomatik keyingi bosqichga o'tadigan onboarding oqimi yoki ilovani to'g'ridan-to'g'ri muayyan ekranda ochadigan deep link-ni tasavvur qiling. Mana shu dasturiy navigatsiya deyiladi.
NavigationPath β joriy ekranlar to'plamini ifodalovchi qiymat. Ushbu path-ni NavigationStack-ga bersangiz, boshqaruv sizda bo'ladi: path-ga qiymat qo'shsangiz yangi ekran push qilinadi. Oxirgi qiymatni olib tashlasangiz orqaga qaytasiz. Butun path-ni bo'shatib tashlasangiz ildiz ekraniga qaytasiz.
Bu o'rta daraja tushunchasi β ko'pchilik boshlang'ich ilovalarda unga muhtoj bo'lmaysiz. Lekin haqiqiy ko'p ekranli oqimlarni qura boshlaganingizda, u sizga kerak bo'lib qoladi.
NavigationPath patternlari
path.append()
// Istalgan Hashable qiymatni qo'shing β tur .navigationDestination-ga mos bo'lishi kerak
path.append("SozlamalarEkrani")
// Hashable protokoliga mos maxsus turlarni ham qo'shish mumkin
path.append(tanlanganFoydalanuvchi)
Qo'shadigan qiymat Hashable bo'lishi kerak β bu Swift protokoli, ya'ni qiymat noyob kalit sifatida ishlatilishi mumkin. String, Int va ko'pchilik asosiy turlar allaqachon Hashable. Maxsus struct-lar aniq muvofiqlikni talab qiladi.
path.removeLast()
// Bir ekranga orqaga (xuddi foydalanuvchi orqaga tugmasini bosganidek)
path.removeLast()
// Bir vaqtda ikki ekranga orqaga
path.removeLast(2)
// To'liq ildizga qaytish
path.removeLast(path.count)
Form topshirilgandan keyin, muvaffaqiyatli amaldan keyin yoki "Tayyor" tugmasida koddan orqaga navigatsiya kerak bo'lgan har qanday holatda ishlating. Foydalanuvchining orqaga tugmasi xuddi shunday qiladi, lekin endi siz uni istalgan joydan ishga tushirishingiz mumkin.
Bir nechta destination turlari
NavigationStack(path: $path) {
ContentView()
// String qiymatlari uchun bir destination
.navigationDestination(for: String.self) { ism in
FoydalanuvchiDetailView(ism: ism)
}
// Int qiymatlari uchun alohida destination
.navigationDestination(for: Int.self) { id in
ElementDetailView(id: id)
}
}
Bir xil stack-da bir nechta .navigationDestination modifikatorini ro'yxatdan o'tkazishingiz mumkin β har bir tur uchun bittadan. String qo'shsangiz FoydalanuvchiDetailView-ga boradi. Int qo'shsangiz ElementDetailView-ga boradi. SwiftUI tur asosida avtomatik yo'naltiradi.
Swift'da yangimisiz?:
@Stateβ SwiftUI-da vaqt o'tishi bilan o'zgarishi va UI yangilanishlarini boshqarishi mumkin bo'lgan qiymatlarni saqlash usuli.patho'zgarganda β qiymat qo'shilsa yoki olib tashlansa β SwiftUI yangi holatni aks ettirish uchunNavigationStackni avtomatik qayta chizadi.@Statehaqida ko'proq Stage 2 da o'rganasiz.
Tezkor ma'lumotnoma
| Amal | Nima qiladi |
|---|---|
NavigationPath() | Bo'sh path yaratadi (qo'shimcha ekran yo'q) |
path.append(qiymat) | Berilgan tur uchun yangi ekran push qiladi |
path.removeLast() | Eng ustki ekranni pop qiladi (bir orqaga) |
path.removeLast(path.count) | Barcha ekranlarni pop qiladi (ildizga qaytadi) |
path.count | Ildiz ustidagi joriy ekranlar soni |
path.isEmpty | Ildiz ekranida bo'lsangiz true |
Topshiriq: onboarding oqimi
3 ta ekranli oddiy onboarding oqimini yarating: Xush kelibsiz, Imkoniyatlar va Boshlash. Ekranlar orasida oldinga siljish uchun NavigationPath va tugmalardan (NavigationLink-lardan emas) foydalaning. Oxirgi ekranga path-ni bo'shatib Xush kelibsiz-ga qaytuvchi "Qaytadan boshlash" tugmasini qo'shing. Hammasini simulyatorda sinab ko'ring.