Push Presentation — een navigatiepatroon in mobiele apps waarbij elk nieuw scherm bovenop het vorige in de navigatiestack wordt toegevoegd. De gebruiker kan sequentieel vooruit door de inhoud navigeren en terugkeren via de systeemknop of swipe. Volgens Apple Developer, 2025 wordt UINavigationController in 85% van de iOS-apps als primair navigatiepatroon gebruikt. In Android wordt vergelijkbare functionaliteit gerealiseerd via FragmentManager en NavController van Navigation Component.
Belangrijkste punten
Push Presentation — is een navigatiemechanisme waarbij elk nieuw scherm bovenop de stack wordt geplaatst, terwijl het vorige scherm in het geheugen eronder blijft. De gebruiker navigeert dieper in de inhoud door achtereenvolgens detailschermen te openen, en de terugknop brengt hem terug naar de vorige stap.
De architectuur van Push-navigatie is gebaseerd op de LIFO-gegevensstructuur (Last In, First Out). Een nieuw scherm wordt altijd aan het einde van de stack toegevoegd en verwijdering vindt alleen van bovenaf plaats. Dit garandeert voorspelbaar gedrag: de gebruiker weet altijd dat de terugknop hem precies één stap terugbrengt. De navigatiestack kan 2 tot 10+ schermen bevatten, afhankelijk van de complexiteit van de app.
Push Presentation is het primaire patroon in apps met hiërarchische inhoud: nieuwsfeeds, productcatalogi, menu's met meerdere niveaus en documentatie. Volgens Material Design is stacknavigatie geschikt voor scenario's waarin de gebruiker inhoud van algemeen naar specifiek verkent en elk volgend scherm het begrip van het onderwerp verdiept.
De navigatiestack — is een geordende set schermen, waarbij elk element de status van zijn ViewController of Fragment opslaat. Tijdens een Push-operatie wordt een nieuw scherm aan de stack toegevoegd, de weergave ervan wordt geanimeerd (slide van rechts in iOS, slide van onderen of Fade in Android) en wordt actief.
Tijdens een Pop-operatie (terugdrukken) wordt het bovenste scherm uit de stack verwijderd, vernietigd of naar het geheugen verplaatst, en wordt het vorige scherm actief. iOS vernietigt standaard de popped ViewController en maakt geheugen vrij. Android kan de Fragment in de back stack bewaren met de mogelijkheid om te herstellen zonder opnieuw te creëren.
De diepte van de stack beïnvloedt de prestaties: elk scherm in de stack verbruikt geheugen. Het wordt aanbevolen niet meer dan 10 schermen in de stack te bewaren. Voor diepe navigatie gebruikt u PopToRoot of herstart u de stack met een nieuw root-scherm. Navigation Component in Android beheert automatisch de stackstatus via SavedStateHandle.
UINavigationController — een containercontroller in iOS die de stack van UIViewController beheert. Het toont automatisch de navigatiebalk (navigation bar) met de titel van het huidige scherm en een terugknop. De standaard Push-animatie — slide van rechts naar links, die bij de gebruiker het gevoel van onderdompeling in de inhoud creëert.
Toevoegen van een scherm gebeurt via pushViewController(_:animated:). Verwijderen — via popViewController(animated:). Om terug te keren naar het root-scherm wordt popToRootViewController(animated:) gebruikt. UINavigationController ondersteunt ook programmatisch stackbeheer via de eigenschap viewControllers — een array van alle controllers in de stack.
De navigatiebalk bevat de schermtitel (title), een terugknop en optionele actieknoppen. Vanaf iOS 11 maken Large Titles (prefersLargeTitles) het mogelijk de titel in een vergroot lettertype weer te geven, dat bij scrollen geanimeerd krimpt. Dit verbetert de navigatiehiërarchie en informeert de gebruiker over de huidige sectie.
let detailVC = DetailViewController()
detailVC.title = "Item Details"
navigationController?.pushViewController(detailVC, animated: true)
// Terug naar vorig scherm
navigationController?.popViewController(animated: true)
// Terug naar rootscherm
navigationController?.popToRootViewController(animated: true)
Navigation Component — een Android Jetpack-bibliotheek voor declaratieve navigatie. Het biedt NavController die fragmenten of compose-schermen beheert via een navigatiegraaf (nav_graph). Push in Android is analoog aan iOS: elke nieuwe Fragment wordt aan de back stack toegevoegd en de terugknop herstelt de vorige.
NavHost — een container die de huidige bestemming uit NavGraph toont. NavGraph — een XML-bestand dat alle schermen van de app en de verbindingen ertussen beschrijft. Transities worden gedefinieerd via actions met specificatie van destination en optionele argumenten. Navigation Component verwerkt automatisch de systeem-terugknop, animaties en statusopslag.
Voor gegevensoverdracht tussen schermen ondersteunt Navigation Component Safe Args — codegeneratie van type-safe argumentklassen. In plaats van handmatig gegevens in Bundle te plaatsen, declareert de ontwikkelaar argumenten in NavGraph en ontvangt ze via gegenereerde Directions- en Args-klassen. Safe Args elimineert type-mismatchfouten en vereenvoudigt refactoring.
// NavGraph-definitie in 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) }
}
}
// Programmatisch navigeren
navController.navigate("detail/42")
Combinatie van Bottom Navigation en Push-navigatie — een veelvoorkomend patroon in mobiele apps. Elk tabblad van Bottom Navigation heeft zijn eigen schermstack. Navigation Component ondersteunt dit via NavHost per tab of een enkele NavHost met aparte grafen voor elk tabblad. Het wisselen van tabbladen reset de status van Push-stacks niet.
Push Presentation en Modal Presentation lossen verschillende navigatietaken op. Push is bedoeld voor sequentiële inhoudsweergave, waarbij elk nieuw scherm de context verdiept. Modal — voor focustaken die voltooiing vereisen. In de praktijk is het belangrijk het juiste patroon voor het specifieke scenario te kiezen.
Belangrijkste selectiecriteria: als de gebruiker vrij moet kunnen terugkeren zonder contextverlies — kies Push. Als de taak tijdelijk is en de hoofdinhoud blokkeert (formulier, authenticatie) — gebruik Modal. Het mengen van patronen op één scherm (Push binnen Modal) is toegestaan, maar vereist een duidelijke visuele hiërarchie.
Het is een fout om Modal te gebruiken voor schermsequenties die logisch deel uitmaken van de hoofdstroom. Bijvoorbeeld, de ordercreatie-assistent (Stap 1 → Stap 2 → Stap 3) kan beter worden geïmplementeerd via Push binnen een modale container dan via een keten van modale vensters. Dit behoudt de navigatiehiërarchie en de voorspelbaarheid van terugkeer.
Laten we de volledige implementatie van Push-navigatie op beide platforms bekijken. Het Swift-voorbeeld demonstreert UINavigationController met programmatisch stackbeheer en verwerking van diepe links. Het Kotlin-voorbeeld toont Navigation Component met NavHost, argumenten en animaties.
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() })
}
}
}
De voorbeelden tonen basis Push-navigatie: lijst → details. iOS gebruikt storyboards en UINavigationController met handmatige gegevensoverdracht. Android gebruikt NavHost met type-safe argumenten en automatisch back stack-beheer. Beide benaderingen ondersteunen diepe links, aangepaste animaties en statusopslag bij rotatie.
Veelgestelde vragen
Push voegt een scherm toe aan de UINavigationController-stack met een terugknop. Present opent een modaal venster zonder terugknop — de gebruiker moet het expliciet sluiten. Push is geschikt voor sequentiële inhoud, Present — voor focustaken. In SwiftUI komt Push overeen met NavigationLink en Present met .sheet.
Navigation Component biedt methoden popBackStack tot een bepaald punt en popUpTo voor het opschonen van de stack. Om stackoverloop te voorkomen, gebruikt u popUpTo(startDestination) { inclusive = true } vóór navigate. Dit garandeert dat de stack niet meer dan 5–7 schermen tegelijk bevat.
Ja, combinatie van Push en Modal is een standaard patroon. Bijvoorbeeld, lijst → Push naar details → Modal voor authenticatie. Het wordt aanbevolen Push niet binnen Modal te plaatsen: een modaal venster mag geen stacknavigatie bevatten. Als er binnen een modaal venster een schermsequentie nodig is — gebruik Push binnen de modale container.
Deep Links in Push-navigatie openen de app op een specifiek scherm. iOS gebruikt URL-schema's en Universal Links met UINavigationController. Android gebruikt Intent Filters met NavDeepLink. In beide gevallen parseert het systeem de link en maakt een navigatiestack naar het doelscherm, met behoud van de mogelijkheid om terug te keren.
iOS gebruikt de standaard slide-animatie die kan worden aangepast via UINavigationControllerDelegate. Android Navigation Component ondersteunt aangepaste animaties via XML-bronnen (slide_in_right, slide_out_left). Voor Compose gebruikt u AnimatedNavHost met de modifier animateItemPlacement.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook