Push Presentation v mobilním vývoji: co to je, zásobník obrazovek

Autor: IT Sectr Publikováno: 2026-06-09 Doba čtení: 5 min

Push Presentation — vzor navigace v mobilních aplikacích, při kterém je každá nová obrazovka přidána do navigačního zásobníku nad předchozí. Uživatel může postupně přecházet vpřed obsahem a vracet se zpět pomocí systémového tlačítka nebo přejetí. Podle Apple Developer, 2025 je UINavigationController používán v 85% iOS aplikací jako hlavní navigační vzor. V Androidu je podobná funkcionalita realizována prostřednictvím FragmentManager a NavController z Navigation Component.

Hlavní body

  • Push Presentation — přidání obrazovky do navigačního zásobníku s automatickým tlačítkem zpět na předchozí obrazovku.
  • UINavigationController v iOS spravuje zásobník UIViewController pomocí metod pushViewController a popViewController.
  • Android Navigation Component používá NavController s NavHost a navigačními grafy ve formátu XML nebo Compose.
  • Zásobníková navigace uchovává historii přechodů a umožňuje uživateli vrátit se na libovolnou předchozí obrazovku.
  • Deep linking v Push navigaci je podporován prostřednictvím zpracování Intent a NavDeepLink v Androidu a URL schémat v iOS.

Co je Push Presentation?

Push Presentation — je mechanismus navigace, při kterém je každá nová obrazovka umístěna na vrchol zásobníku, zatímco předchozí obrazovka zůstává v paměti pod ní. Uživatel proniká hlouběji do obsahu postupným otevíráním detailních obrazovek a tlačítko zpět ho vrací na předchozí krok.

Architektura Push navigace je založena na datové struktuře LIFO (Last In, First Out). Nová obrazovka je vždy přidána na konec zásobníku a odebírá se pouze z vrcholu. To zaručuje předvídatelné chování: uživatel vždy ví, že tlačítko zpět ho vrátí přesně o jeden krok zpět. Navigační zásobník může obsahovat 2 až 10+ obrazovek v závislosti na složitosti aplikace.

Push Presentation je hlavní vzor v aplikacích s hierarchickým obsahem: zpravodajské kanály, katalogy produktů, víceúrovňová menu a dokumentace. Podle Material Design je zásobníková navigace vhodná pro scénáře, kde uživatel zkoumá obsah od obecného ke konkrétnímu a každá další obrazovka prohlubuje porozumění tématu.

Navigační zásobník — je uspořádaná sada obrazovek, kde každý prvek ukládá stav svého ViewController nebo Fragment. Během operace Push je nová obrazovka přidána do zásobníku, její zobrazení je animováno (posun z pravé strany v iOS, posun zdola nebo Fade v Androidu) a stává se aktivní.

Během operace Pop (stisknutí tlačítka zpět) je horní obrazovka odstraněna ze zásobníku, zničena nebo přejde do paměti a předchozí obrazovka se stává aktivní. iOS ve výchozím nastavení zničí popped ViewController a uvolní paměť. Android může uchovat Fragment v back stack s možností obnovení bez opětovného vytvoření.

Hloubka zásobníku ovlivňuje výkon: každá obrazovka v zásobníku spotřebovává paměť. Doporučuje se neukládat více než 10 obrazovek v zásobníku. Pro hlubokou navigaci použijte PopToRoot nebo restart zásobníku s novou root obrazovkou. Navigation Component v Androidu automaticky spravuje stav zásobníku prostřednictvím SavedStateHandle.

Push navigace v iOS: UINavigationController

UINavigationController — kontejnerový kontroler iOS, který spravuje zásobník UIViewController. Automaticky zobrazuje navigační panel (navigation bar) s názvem aktuální obrazovky a tlačítkem zpět. Výchozí animace Push — posun zprava doleva, vytvářející u uživatele pocit ponoření do obsahu.

Správa zásobníku

Přidání obrazovky se provádí pomocí pushViewController(_:animated:). Odebrání — pomocí popViewController(animated:). Pro návrat na root obrazovku se používá popToRootViewController(animated:). UINavigationController také podporuje programovou správu zásobníku prostřednictvím vlastnosti viewControllers — pole všech kontrolerů v zásobníku.

Navigation Bar a Large Titles

Navigační panel obsahuje název obrazovky (title), tlačítko zpět a volitelná tlačítka akcí. Od iOS 11 umožňují Large Titles (prefersLargeTitles) zobrazení názvu zvětšeným písmem, které se při rolování animovaně zmenšuje. To zlepšuje navigační hierarchii a informuje uživatele o aktuální sekci.

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

// Návrat na předchozí obrazovku
navigationController?.popViewController(animated: true)

// Návrat na root obrazovku
navigationController?.popToRootViewController(animated: true)

Push navigace v Androidu: Navigation Component

Navigation Component — knihovna Android Jetpack pro deklarativní navigaci. Poskytuje NavController, který spravuje fragmenty nebo compose obrazovky prostřednictvím navigačního grafu (nav_graph). Push v Androidu je analogický iOS: každý nový Fragment je přidán do back stack a tlačítko zpět obnoví předchozí.

NavHost a NavGraph

NavHost — kontejner, který zobrazuje aktuální cíl z NavGraph. NavGraph — XML soubor popisující všechny obrazovky aplikace a spojení mezi nimi. Přechody jsou definovány pomocí actions s uvedením destination a volitelných argumentů. Navigation Component automaticky zpracovává systémové tlačítko zpět, animace a ukládání stavu.

Argumenty a Safe Args

Pro přenos dat mezi obrazovkami Navigation Component podporuje Safe Args — generování kódu type-safe tříd argumentů. Místo ručního vkládání dat do Bundle vývojář deklaruje argumenty v NavGraph a přijímá je prostřednictvím generovaných tříd Directions a Args. Safe Args eliminuje chyby neshody typů a zjednodušuje refaktorování.

kotlin
// Definice NavGraph v XML
<!-- 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) }
    }
}

// Programová navigace
navController.navigate("detail/42")

BottomNavigation se zásobníkem Push

Kombinace Bottom Navigation a Push navigace — častý vzor v mobilních aplikacích. Každá karta Bottom Navigation má vlastní zásobník obrazovek. Navigation Component to podporuje prostřednictvím NavHost per tab nebo jediného NavHost s oddělenými grafy pro každou kartu. Přepínání karet neresusuje stav zásobníků Push.

Push Presentation vs Modal Presentation

Push Presentation a Modal Presentation řeší různé úkoly navigace. Push je určen pro sekvenční prohlížení obsahu, kde každá nová obrazovka prohlubuje kontext. Modal — pro úkoly vyžadující soustředění a dokončení. V praxi je důležité zvolit správný vzor pro konkrétní scénář.

Hlavní kritéria výběru: pokud by se uživatel měl volně vracet bez ztráty kontextu — zvolte Push. Pokud je úkol dočasný a blokuje hlavní obsah (formulář, autorizace) — použijte Modal. Míchání vzorů na jedné obrazovce (Push uvnitř Modal) je povoleno, ale vyžaduje jasnou vizuální hierarchii.

Chybou je použití Modal pro sekvence obrazovek, které jsou logicky součástí hlavního toku. Například průvodce vytvořením objednávky (Krok 1 → Krok 2 → Krok 3) je lépe realizovat pomocí Push uvnitř modálního kontejneru než řetězcem modálních oken. To zachovává navigační hierarchii a předvídatelnost návratu.

Příklady implementace v Swift a Kotlin

Podívejme se na kompletní implementaci Push navigace na obou platformách. Příklad v Swift demonstruje UINavigationController s programovým řízením zásobníku a zpracováním hlubokých odkazů. Příklad v Kotlin ukazuje Navigation Component s NavHost, argumenty a animacemi.

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

Příklady ukazují základní Push navigaci: seznam → podrobnosti. iOS používá storyboardy a UINavigationController s ručním předáváním dat. Android používá NavHost s type-safe argumenty a automatickou správou back stack. Oba přístupy podporují hluboké odkazy, vlastní animace a ukládání stavu při otočení.

Často kladené otázky

Čím se liší Push Presentation od Present v iOS?

Push přidá obrazovku do zásobníku UINavigationController s tlačítkem zpět. Present otevře modální okno bez tlačítka zpět — uživatel ho musí explicitně zavřít. Push je vhodný pro sekvenční obsah, Present — pro úkoly vyžadující soustředění. V SwiftUI Push odpovídá NavigationLink a Present odpovídá .sheet.

Jak spravovat hluboký navigační zásobník v Androidu?

Navigation Component poskytuje metody popBackStack do určitého bodu a popUpTo pro čištění zásobníku. Aby se zabránilo přetečení zásobníku, použijte popUpTo(startDestination) { inclusive = true } před navigate. To zaručuje, že zásobník neobsahuje více než 5–7 obrazovek současně.

Lze kombinovat Push a Modal v jedné navigaci?

Ano, kombinace Push a Modal je standardní vzor. Například: seznam → Push na podrobnosti → Modal pro autorizaci. Doporučuje se neumísťovat Push uvnitř Modal: modální okno by nemělo obsahovat zásobníkovou navigaci. Pokud je uvnitř modálního okna potřeba sekvence obrazovek — použijte Push uvnitř modálního kontejneru.

Jak funguje Push Presentation s Deep Links?

Deep Links v Push navigaci otevírají aplikaci na konkrétní obrazovce. iOS používá URL schémata a Universal Links s UINavigationController. Android používá Intent Filters s NavDeepLink. V obou případech systém analyzuje odkaz a vytvoří navigační zásobník k cílové obrazovce, přičemž zachová možnost návratu.

Jak animovat Push přechody?

iOS používá standardní animaci posunu, kterou lze přizpůsobit prostřednictvím UINavigationControllerDelegate. Android Navigation Component podporuje vlastní animace pomocí XML zdrojů (slide_in_right, slide_out_left). Pro Compose použijte AnimatedNavHost s modifikátorem animateItemPlacement.

Shrnutí

  • Push Presentation — vzor zásobníkové navigace, který přidává každou novou obrazovku nad předchozí s tlačítkem zpět.
  • UINavigationController spravuje zásobník v iOS pomocí pushViewController a popViewController s navigačním panelem.
  • Android Navigation Component poskytuje NavHost, NavGraph a Safe Args pro type-safe navigaci.
  • Push se liší od Modal absencí blokování obsahu a volným návratem po zásobníku.
  • Hloubka zásobníku by neměla přesáhnout 10 obrazovek pro optimální výkon aplikace.
  • Deep Links v Push navigaci jsou podporovány prostřednictvím URL schémat a NavDeepLink s uchováním historie.
  • Doporučuje se používat Push pro hierarchický obsah a Modal — pro úkoly vyžadující soustředění.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také