Push Presentation — mobil tətbiqlərdə naviqasiya nümunəsidir, burada hər yeni ekran naviqasiya yığınına əvvəlki ekranın üzərinə əlavə olunur. İstifadəçi ardıcıl olaraq məzmun üzrə irəli keçə və sistem düyməsi və ya sürüşdürmə vasitəsilə geri qayıda bilər. Apple Developer, 2025-ə görə, UINavigationController iOS tətbiqlərinin 85%-də əsas naviqasiya nümunəsi kimi istifadə olunur. Android-də oxşar funksionallıq FragmentManager və Navigation Component-dən NavController vasitəsilə həyata keçirilir.
Əsas məqamlar
Push Presentation — bu naviqasiya mexanizmidir, burada hər yeni ekran yığının təpəsinə yerləşdirilir, əvvəlki ekran isə onun altında yaddaşda qalır. İstifadəçi ardıcıl olaraq təfərrüatlı ekranları açaraq məzmuna dərinləşir, geri düyməsi isə onu əvvəlki addıma qaytarır.
Push naviqasiyasının arxitekturası LIFO (Last In, First Out) məlumat strukturuna əsaslanır. Yeni ekran həmişə yığının sonuna əlavə olunur, silmə isə yalnız təpədən aparılır. Bu, proqnozlaşdırıla bilən davranışı təmin edir: istifadəçi həmişə bilir ki, geri düyməsi onu düz bir addım geri qaytaracaq. Naviqasiya yığını tətbiqin mürəkkəbliyindən asılı olaraq 2-dən 10+-dək ekran ehtiva edə bilər.
Push Presentation iyerarxik məzmunlu tətbiqlərdə əsas nümunədir: xəbər lentləri, məhsul kataloqları, çoxsəviyyəli menyular və sənədlər. Material Design-a görə, yığın naviqasiyası istifadəçinin məzmunu ümumidən xüsusiyə doğru tədqiq etdiyi ssenarilər üçün uyğundur, hər növbəti ekran isə mövzunu daha dərindən anlamağa kömək edir.
Naviqasiya yığını — bu, hər bir elementin öz ViewController və ya Fragment vəziyyətini saxladığı nizamlı ekranlar toplusudur. Push əməliyyatı zamanı yeni ekran yığına əlavə olunur, onun göstərilməsi animasiya edilir (iOS-da sağdan sürüşdürmə, Android-də aşağıdan sürüşdürmə və ya Fade) və aktiv olur.
Pop əməliyyatı (geri basma) zamanı yuxarı ekran yığından silinir, məhv edilir və ya yaddaşa keçir, əvvəlki ekran isə aktiv olur. iOS susmaya görə popped ViewController-ı məhv edərək yaddaşı boşaldır. Android Fragment-i back stack-də yenidən yaratmadan bərpa etmək imkanı ilə saxlaya bilər.
Yığının dərinliyi performansa təsir edir: yığındakı hər ekran yaddaş istehlak edir. Tövsiyə olunur yığında 10-dan çox ekran saxlamamaq. Dərin naviqasiya üçün PopToRoot və ya yeni kök ekranı ilə yığının yenidən başladılmasından istifadə edin. Android-də Navigation Component SavedStateHandle vasitəsilə yığının vəziyyətini avtomatik idarə edir.
UINavigationController — iOS-un konteyner kontrolleri, UIViewController yığınını idarə edir. O, avtomatik olaraq cari ekranın başlığı və geri düyməsi ilə naviqasiya panelini (navigation bar) göstərir. Susmaya görə Push animasiyası — sağdan sola sürüşdürmə, istifadəçidə məzmuna daxil olma hissi yaradır.
Ekranın əlavə edilməsi pushViewController(_:animated:) vasitəsilə həyata keçirilir. Silinmə — popViewController(animated:) vasitəsilə. Kök ekrana qayıtmaq üçün popToRootViewController(animated:) istifadə olunur. UINavigationController həmçinin viewControllers xassəsi — yığındakı bütün kontrollerlərin massivi vasitəsilə yığının proqram idarəsini dəstəkləyir.
Naviqasiya paneli ekranın başlığını (title), geri düyməsini və isteğe bağlı əməliyyat düymələrini ehtiva edir. iOS 11-dən etibarən Large Titles (prefersLargeTitles) başlığın böyüdülmüş şriftlə göstərilməsinə imkan verir, bu da sürüşdürmə zamanı animasiya ilə kiçilir. Bu, naviqasiya iyerarxiyasını yaxşılaşdırır və istifadəçini cari bölmə haqqında məlumatlandırır.
let detailVC = DetailViewController()
detailVC.title = "Item Details"
navigationController?.pushViewController(detailVC, animated: true)
// Əvvəlki ekrana qayıt
navigationController?.popViewController(animated: true)
// Kök ekrana qayıt
navigationController?.popToRootViewController(animated: true)
Navigation Component — deklarativ naviqasiya üçün Android Jetpack kitabxanası. O, naviqasiya qrafı (nav_graph) vasitəsilə fragmentləri və ya compose ekranlarını idarə edən NavController təmin edir. Android-də Push iOS-a bənzəyir: hər yeni Fragment back stack-ə əlavə olunur, geri düyməsi isə əvvəlkini bərpa edir.
NavHost — NavGraph-dan cari təyinatı göstərən konteyner. NavGraph — tətbiqin bütün ekranlarını və onlar arasındakı əlaqələri təsvir edən XML faylı. Keçidlər actions vasitəsilə destination və isteğe bağlı arqumentlərlə müəyyən edilir. Navigation Component avtomatik olaraq sistem geri düyməsini, animasiyaları və vəziyyətin saxlanmasını idarə edir.
Ekranlar arasında məlumat ötürmək üçün Navigation Component Safe Args — type-safe sinif arqumentlərinin kod generasiyasını dəstəkləyir. Məlumatı əl ilə Bundle-ə yerləşdirmək əvəzinə, tərtibatçı NavGraph-da arqumentlər elan edir və onları generated Directions və Args sinifləri vasitəsilə alır. Safe Args tip uyğunsuzluğu səhvlərini aradan qaldırır və refaktorinqi asanlaşdırır.
// NavGraph-ın XML-də tərifi
<!-- res/navigation/nav_graph.xml -->
@navigation {
NavHost(startDestination = "list") {
composable("list") { ListScreen() }
composable(
"detail/{itemId}",
arguments = listOf(navArgument("itemId") { type = NavType.IntType })
) { DetailScreen(it.arguments()?.getInt("itemId") ?: 0) }
}
}
// Proqram vasitəsilə naviqasiya
navController.navigate("detail/42")
Bottom Navigation və Push naviqasiyasının birləşməsi — mobil tətbiqlərdə geniş yayılmış nümunədir. Bottom Navigation-ın hər bir nişanı öz ekran yığınına malikdir. Navigation Component bunu NavHost per tab və ya hər nişan üçün ayrı qraflarla vahid NavHost vasitəsilə dəstəkləyir. Nişanların dəyişdirilməsi Push yığınlarının vəziyyətini sıfırlamır.
Push Presentation və Modal Presentation naviqasiyanın müxtəlif vəzifələrini həll edir. Push ardıcıl məzmun baxışı üçün nəzərdə tutulub, burada hər yeni ekran konteksti dərinləşdirir. Modal — tamamlanma tələb edən fokus tapşırıqları üçün. Praktikada konkret ssenari üçün düzgün nümunəni seçmək vacibdir.
Əsas seçim meyarları: əgər istifadəçi kontekst itkisi olmadan sərbəst geri qayıtmalıdırsa — Push seçin. Əgər tapşırıq müvəqqətidir və əsas məzmunu bloklayırsa (form, autorizasiya) — Modal istifadə edin. Bir ekranda nümunələrin qarışdırılması (Modal daxilində Push) yol veriləndir, lakin aydın vizual iyerarxiya tələb edir.
Əsas axının məntiqi hissəsi olan ekran ardıcıllıqları üçün Modal istifadə etmək səhvdir. Məsələn, sifariş yaratma ustası (Addım 1 → Addım 2 → Addım 3) modal pəncərələr zənciri əvəzinə modal konteyner daxilində Push vasitəsilə həyata keçirilməlidir. Bu, naviqasiya iyerarxiyasını və qayıdışın proqnozlaşdırıla bilməsini qoruyur.
Hər iki platformada Push naviqasiyasının tam tətbiqini nəzərdən keçirək. Swift nümunəsi proqram yığın idarəsi və dərin linklərin işlənməsi ilə UINavigationController-u nümayiş etdirir. Kotlin nümunəsi NavHost, arqumentlər və animasiyalarla Navigation Component-i göstərir.
class ListViewController: UIViewController {
func showDetail(_ itemId: Int) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let detailVC = storyboard.instantiateViewController(
withIdentifier: "DetailViewController"
) as! DetailViewController
detailVC.itemId = itemId
navigationController?.pushViewController(detailVC, animated: true)
}
}
class DetailViewController: UIViewController {
var itemId: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
title = "Item #\(itemId)"
}
}
@Composable
fun PushNavigationApp() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "list") {
composable("list") {
ListScreen(
onItemClick = { id -> navController.navigate("detail/$id") }
)
}
composable(
"detail/{itemId}",
arguments = listOf(navArgument("itemId") { type = NavType.IntType })
) { backStackEntry ->
val itemId = backStackEntry.arguments()?.getInt("itemId") ?: 0
DetailScreen(itemId = itemId, onBack = { navController.popBackStack() })
}
}
}
Nümunələr əsas Push naviqasiyasını göstərir: siyahı → təfərrüatlar. iOS storyboard-lar və əl məlumat ötürülməsi ilə UINavigationController-dan istifadə edir. Android type-safe arqumentlər və avtomatik back stack idarəsi ilə NavHost-dan istifadə edir. Hər iki yanaşma dərin linkləri, fərdi animasiyaları və döndərmə zamanı vəziyyətin saxlanmasını dəstəkləyir.
Tez-tez verilən suallar
Push ekranı geri düyməsi ilə UINavigationController yığınına əlavə edir. Present geri düyməsi olmadan modal pəncərə açır — istifadəçi onu aşkar şəkildə bağlamalıdır. Push ardıcıl məzmun üçün, Present isə fokus tapşırıqları üçün uyğundur. SwiftUI-də Push NavigationLink-ə, Present isə .sheet-ə uyğun gəlir.
Navigation Component müəyyən nöqtəyə qədər popBackStack və yığını təmizləmək üçün popUpTo metodlarını təqdim edir. Yığının daşmasının qarşısını almaq üçün navigate-dən əvvəl popUpTo(startDestination) { inclusive = true } istifadə edin. Bu, yığının eyni anda 5–7 ekrandan çox ehtiva etməməsini təmin edir.
Bəli, Push və Modal-ın kombinasiyası standart nümunədir. Məsələn, siyahı → təfərrüatlara Push → autorizasiya üçün Modal. Tövsiyə olunur Modal daxilində Push yerləşdirməmək: modal pəncərə yığın naviqasiyasını ehtiva etməməlidir. Əgər modal pəncərə daxilində ekran ardıcıllığı lazımdırsa — modal konteyner daxilində Push-dan istifadə edin.
Deep Links Push naviqasiyasında tətbiqi konkret ekranda açır. iOS URL sxemləri və Universal Links-dən UINavigationController ilə istifadə edir. Android Intent Filters və NavDeepLink-dən istifadə edir. Hər iki halda sistem linki təhlil edir və hədəf ekrana qədər naviqasiya yığını yaradır, geri qayıtma imkanını saxlayır.
iOS UINavigationControllerDelegate vasitəsilə tənzimlənən standart sürüşdürmə animasiyasından istifadə edir. Android Navigation Component XML resursları (slide_in_right, slide_out_left) vasitəsilə fərdi animasiyaları dəstəkləyir. Compose üçün AnimatedNavHost-dan animateItemPlacement modifikatoru ilə istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun