Push Presentation mobil inkişafda: bu nədir, ekran yığını

Müəllif: IT Sectr Dərc olunub: 2026-06-09 Oxuma vaxtı: 5 dəq

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 — naviqasiya yığınına avtomatik geri düyməsi ilə ekranın əlavə edilməsi.
  • UINavigationController iOS-da pushViewController və popViewController metodları vasitəsilə UIViewController yığınını idarə edir.
  • Android Navigation Component NavHost və XML və ya Compose formatında naviqasiya qrafları ilə NavController-dan istifadə edir.
  • Yığın naviqasiyası keçid tarixçəsini saxlayaraq istifadəçiyə istənilən əvvəlki ekrana qayıtmağa imkan verir.
  • Deep linking Push naviqasiyasında Android-də Intent və NavDeepLink, iOS-da isə URL sxemləri vasitəsilə dəstəklənir.

Push Presentation nədir?

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.

iOS-da Push naviqasiyası: UINavigationController

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.

Yığının idarə edilməsi

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.

Navigation Bar və Large Titles

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.

swift
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)

Android-də Push naviqasiyası: Navigation Component

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 və NavGraph

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.

Arqumentlər və Safe Args

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.

kotlin
// 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")

BottomNavigation Push yığını ilə

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 vs Modal Presentation

Push PresentationModal 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.

Swift və Kotlin-də tətbiq nümunələri

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.

swift
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)"
    }
}
kotlin
@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 Presentation iOS-da Present-dən nə ilə fərqlənir?

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.

Android-də dərin naviqasiya yığınını necə idarə etmək olar?

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.

Bir naviqasiyada Push və Modal-ı birləşdirmək olarmı?

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 Presentation ilə necə işləyir?

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.

Push keçidlərini necə animasiya etmək olar?

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ə

  • Push Presentation — hər yeni ekranı əvvəlkinin üzərinə geri düyməsi ilə əlavə edən yığın naviqasiya nümunəsidir.
  • UINavigationController iOS-da yığını pushViewController və popViewController vasitəsilə naviqasiya paneli ilə idarə edir.
  • Android Navigation Component type-safe naviqasiya üçün NavHost, NavGraph və Safe Args təmin edir.
  • Push Modal-dan məzmunu bloklamaması və yığınla sərbəst qayıdış imkanı ilə fərqlənir.
  • Yığının dərinliyi optimal performans üçün 10 ekrandan çox olmamalıdır.
  • Deep Links Push naviqasiyasında URL sxemləri və NavDeepLink vasitəsilə tarixçə saxlanılmaqla dəstəklənir.
  • Tövsiyə olunur iyerarxik məzmun üçün Push, fokus tapşırıqları üçün isə Modal istifadə etmək.

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.

Layihəni müzakirə et

Həm də oxuyun