Push Presentation mobilfejlesztésben: mi ez, képernyőverem

Szerző: IT Sectr Megjelenés: 2026-06-09 Olvasási idő: 5 perc

Push Presentation — navigációs minta mobilalkalmazásokban, amelyben minden új képernyő a navigációs verem tetejére kerül az előző fölé. A felhasználó szekvenciálisan haladhat előre a tartalomban, és visszatérhet a rendszergomb vagy az ujjmozdulat segítségével. A Apple Developer, 2025 szerint az UINavigationController az iOS-alkalmazások 85%-ában használatos elsődleges navigációs mintaként. Androidban hasonló funkcionalitás valósítható meg a FragmentManager és a Navigation Component NavController-e segítségével.

Főbb pontok

  • Push Presentation — képernyő hozzáadása a navigációs veremhez automatikus visszagombbal az előző képernyőre.
  • UINavigationController iOS-ben a pushViewController és popViewController metódusokkal kezeli a UIViewController vermet.
  • Android Navigation Component a NavController-t használja NavHost-tal és XML vagy Compose formátumú navigációs gráfokkal.
  • Vermes navigáció megőrzi az átmenetek előzményeit, lehetővé téve a felhasználónak, hogy bármely előző képernyőre visszatérjen.
  • Deep linking a Push navigációban Androidban az Intent és NavDeepLink, iOS-ben pedig URL-sémák segítségével támogatott.

Mi az a Push Presentation?

Push Presentation — egy navigációs mechanizmus, amelyben minden új képernyő a verem tetejére kerül, míg az előző képernyő alatta marad a memóriában. A felhasználó egymás után nyitja meg a részletes képernyőket, mélyebbre hatolva a tartalomban, a visszagomb pedig visszaviszi az előző lépéshez.

A Push navigáció architektúrája a LIFO (Last In, First Out) adatszerkezeten alapul. Az új képernyő mindig a verem végére kerül, az eltávolítás pedig csak a tetejéről történik. Ez kiszámítható viselkedést garantál: a felhasználó mindig tudja, hogy a visszagomb pontosan egy lépéssel viszi vissza. A navigációs verem 2-től 10+ képernyőt tartalmazhat az alkalmazás összetettségétől függően.

A Push Presentation az elsődleges minta a hierarchikus tartalmú alkalmazásokban: hírcsatornák, termékkatalógusok, többszintű menük és dokumentáció. A Material Design szerint a vermes navigáció olyan forgatókönyvekhez alkalmas, ahol a felhasználó általánosról specifikusra haladva fedezi fel a tartalmat, és minden következő képernyő elmélyíti a téma megértését.

A navigációs verem — képernyők rendezett halmaza, ahol minden elem tárolja a saját ViewController vagy Fragment állapotát. Push művelet során az új képernyő hozzáadódik a veremhez, megjelenése animált (jobbról csúszás iOS-ben, alulról csúszás vagy Fade Androidban), és aktívvá válik.

Pop művelet során (visszagomb megnyomása) a felső képernyő eltávolításra kerül a veremből, megsemmisül vagy memóriába kerül, az előző képernyő pedig aktívvá válik. iOS alapértelmezés szerint megsemmisíti a popped ViewController-t, felszabadítva a memóriát. Android megőrizheti a Fragment-et a back stack-ben, lehetővé téve a visszaállítást újralétrehozás nélkül.

A verem mélysége befolyásolja a teljesítményt: minden képernyő a veremben memóriát fogyaszt. Ajánlott legfeljebb 10 képernyőt tárolni a veremben. Mély navigációhoz használja a PopToRoot-ot vagy a verem újraindítását új root képernyővel. Az Android Navigation Component automatikusan kezeli a verem állapotát a SavedStateHandle segítségével.

Push navigáció iOS-ben: UINavigationController

UINavigationController — egy iOS konténervezérlő, amely a UIViewController vermet kezeli. Automatikusan megjeleníti a navigációs sávot (navigation bar) az aktuális képernyő címével és egy visszagombbal. Az alapértelmezett Push animáció — jobbról balra csúszás, amely a felhasználóban a tartalomba merülés érzetét kelti.

Verem kezelése

A képernyő hozzáadása a pushViewController(_:animated:) segítségével történik. Eltávolítás — a popViewController(animated:) segítségével. A root képernyőre való visszatéréshez a popToRootViewController(animated:) használatos. Az UINavigationController támogatja a verem programozott kezelését is a viewControllers tulajdonságon keresztül — ez a veremben lévő összes vezérlő tömbje.

Navigation Bar és Large Titles

A navigációs sáv tartalmazza a képernyő címét (title), a visszagombot és opcionális műveleti gombokat. Az iOS 11-től kezdve a Large Titles (prefersLargeTitles) lehetővé teszi a cím nagyobb betűmérettel történő megjelenítését, amely görgetéskor animáltan összezsugorodik. Ez javítja a navigációs hierarchiát és tájékoztatja a felhasználót az aktuális szakaszról.

swift
let detailVC = DetailViewController()
detailVC.title = "Item Details"
navigationController?.pushViewController(detailVC, animated: true)

// Vissza az előző képernyőre
navigationController?.popViewController(animated: true)

// Vissza a root képernyőre
navigationController?.popToRootViewController(animated: true)

Push navigáció Androidban: Navigation Component

Navigation Component — egy Android Jetpack könyvtár deklaratív navigációhoz. Biztosítja a NavController-t, amely fragmenteket vagy compose képernyőket kezel egy navigációs gráfon (nav_graph) keresztül. Az Androidban a Push analóg az iOS-szel: minden új Fragment hozzáadódik a back stack-hez, és a visszagomb visszaállítja az előzőt.

NavHost és NavGraph

NavHost — egy konténer, amely az aktuális célt jeleníti meg a NavGraph-ból. NavGraph — egy XML fájl, amely leírja az alkalmazás összes képernyőjét és a köztük lévő kapcsolatokat. Az átmenetek actions segítségével definiálhatók a destination és opcionális argumentumok megadásával. A Navigation Component automatikusan kezeli a rendszer visszagombot, az animációkat és az állapotmentést.

Argumentumok és Safe Args

A képernyők közötti adatátvitelhez a Navigation Component támogatja a Safe Args-ot — type-safe argumentumosztályok kódgenerálását. Ahelyett, hogy manuálisan helyezné az adatokat Bundle-be, a fejlesztő argumentumokat deklarál a NavGraph-ban, és azokat a generált Directions és Args osztályokon keresztül kapja meg. A Safe Args kiküszöböli a típus-eltérési hibákat és leegyszerűsíti a refaktorálást.

kotlin
// NavGraph definíció XML-ben
<!-- 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) }
    }
}

// Programozott navigáció
navController.navigate("detail/42")

BottomNavigation Push veremmel

A Bottom Navigation és a Push navigáció kombinációja — gyakori minta mobilalkalmazásokban. A Bottom Navigation minden lapjának saját képernyő verme van. Navigation Component ezt NavHost per tab vagy egyetlen NavHost segítségével támogatja, külön gráfokkal minden laphoz. A lapok váltása nem állítja vissza a Push vermek állapotát.

Push Presentation vs Modal Presentation

Push Presentation és Modal Presentation különböző navigációs feladatokat oldanak meg. A Push szekvenciális tartalommegtekintésre szolgál, ahol minden új képernyő elmélyíti a kontextust. A Modal — olyan fókuszált feladatokra, amelyek befejezést igényelnek. A gyakorlatban fontos a megfelelő minta kiválasztása az adott forgatókönyvhöz.

Fő kiválasztási szempontok: ha a felhasználónak szabadon vissza kell tudnia térnie a kontextus elvesztése nélkül — válassza a Push-t. Ha a feladat átmeneti és blokkolja a fő tartalmat (űrlap, hitelesítés) — használja a Modal-t. A minták keverése egy képernyőn (Push Modal-on belül) megengedett, de egyértelmű vizuális hierarchiát igényel.

Hiba a Modal használata olyan képernyősorozatokhoz, amelyek logikailag a fő folyamat részét képezik. Például a rendeléslétrehozó varázsló (1. lépés → 2. lépés → 3. lépés) jobban megvalósítható Push segítségével egy modális konténeren belül, mint modális ablakok láncolatával. Ez megőrzi a navigációs hierarchiát és a visszatérés kiszámíthatóságát.

Implementációs példák Swiftben és Kotlinban

Tekintsük át a Push navigáció teljes implementációját mindkét platformon. A Swift példa az UINavigationController-t mutatja be programozott veremkezeléssel és mély linkek feldolgozásával. A Kotlin példa a Navigation Component-et mutatja be NavHost-tal, argumentumokkal és animációkkal.

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() })
        }
    }
}

A példák az alap Push navigációt mutatják: lista → részletek. iOS storyboard-okat és UINavigationController-t használ manuális adatátvitellel. Android NavHost-t használ type-safe argumentumokkal és automatikus back stack kezeléssel. Mindkét megközelítés támogatja a mély linkeket, egyéni animációkat és az állapotmentést elforgatáskor.

Gyakran ismételt kérdések

Miben különbözik a Push Presentation a Present-től iOS-ben?

Push hozzáadja a képernyőt az UINavigationController veremhez egy visszagombbal. A Present egy modális ablakot nyit meg visszagomb nélkül — a felhasználónak kifejezetten be kell zárnia. A Push szekvenciális tartalomhoz alkalmas, a Present — fókuszált feladatokhoz. A SwiftUI-ben a Push a NavigationLink-nek, a Present pedig a .sheet-nek felel meg.

Hogyan kezeljük a mély navigációs vermet Androidban?

Navigation Component biztosítja a popBackStack metódust egy adott pontig és a popUpTo-t a verem tisztításához. A verem túlcsordulásának megelőzéséhez használja a popUpTo(startDestination) { inclusive = true } parancsot a navigate előtt. Ez garantálja, hogy a verem nem tartalmaz 5–7 képernyőnél többet egyszerre.

Kombinálható a Push és a Modal egy navigáción belül?

Igen, a Push és Modal kombinációja szabványos minta. Például: lista → Push a részletekhez → Modal a hitelesítéshez. Ajánlott nem elhelyezni a Push-t Modal-on belül: a modális ablak nem tartalmazhat vermes navigációt. Ha a modális ablakon belül képernyősorozatra van szükség — használjon Push-t a modális konténeren belül.

Hogyan működik a Push Presentation a Deep Links-szel?

Deep Links a Push navigációban egy adott képernyőn nyitják meg az alkalmazást. iOS URL-sémákat és Universal Links-et használ az UINavigationController-rel. Android Intent Filters-t használ a NavDeepLink-kel. Mindkét esetben a rendszer elemzi a linket, és navigációs vermet hoz létre a célképernyőig, megtartva a visszatérés lehetőségét.

Hogyan animáljuk a Push átmeneteket?

iOS a szabványos csúszó animációt használja, amely az UINavigationControllerDelegate segítségével testreszabható. Android Navigation Component egyéni animációkat támogat XML erőforrásokon keresztül (slide_in_right, slide_out_left). Compose esetén használja az AnimatedNavHost-ot az animateItemPlacement módosítóval.

Összefoglalás

  • Push Presentation — vermes navigációs minta, amely minden új képernyőt az előző fölé helyez egy visszagombbal.
  • UINavigationController kezeli a vermet iOS-ben a pushViewController és popViewController segítségével navigációs sávval.
  • Android Navigation Component NavHost-ot, NavGraph-ot és Safe Args-ot biztosít a type-safe navigációhoz.
  • Push abban különbözik a Modal-tól, hogy nem blokkolja a tartalmat és szabad visszatérést biztosít a veremben.
  • A verem mélysége nem haladhatja meg a 10 képernyőt az optimális alkalmazás-teljesítmény érdekében.
  • Deep Links a Push navigációban URL-sémákon és NavDeepLink-en keresztül támogatott, az előzmények megőrzésével.
  • Ajánlott a Push használata hierarchikus tartalomhoz és a Modal — fókuszált feladatokhoz.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is