Push Presentation — pola navigasi dalam aplikasi mobile, di mana setiap layar baru ditambahkan ke tumpukan navigasi di atas layar sebelumnya. Pengguna dapat bergerak maju secara berurutan melalui konten dan kembali melalui tombol sistem atau gesekan. Menurut Apple Developer, 2025, UINavigationController digunakan di 85% aplikasi iOS sebagai pola navigasi utama. Di Android, fungsionalitas serupa diimplementasikan melalui FragmentManager dan NavController dari Navigation Component.
Poin utama
Push Presentation — adalah mekanisme navigasi di mana setiap layar baru ditempatkan di atas tumpukan, sementara layar sebelumnya tetap di memori di bawahnya. Pengguna masuk lebih dalam ke konten dengan membuka layar detail secara berurutan, dan tombol kembali mengembalikannya ke langkah sebelumnya.
Arsitektur navigasi Push didasarkan pada struktur data LIFO (Last In, First Out). Layar baru selalu ditambahkan ke akhir tumpukan, dan penghapusan hanya terjadi dari atas. Ini menjamin perilaku yang dapat diprediksi: pengguna selalu tahu bahwa tombol kembali akan mengembalikannya tepat satu langkah ke belakang. Tumpukan navigasi dapat berisi 2 hingga 10+ layar tergantung pada kompleksitas aplikasi.
Push Presentation adalah pola utama dalam aplikasi dengan konten hierarkis: umpan berita, katalog produk, menu bertingkat, dan dokumentasi. Menurut Material Design, navigasi tumpukan cocok untuk skenario di mana pengguna menjelajahi konten dari umum ke khusus, dan setiap layar berikutnya memperdalam pemahaman topik.
Tumpukan navigasi — adalah kumpulan layar yang terurut, di mana setiap elemen menyimpan status ViewController atau Fragment-nya. Selama operasi Push, layar baru ditambahkan ke tumpukan, tampilannya dianimasikan (geser dari kanan di iOS, geser dari bawah atau Fade di Android) dan menjadi aktif.
Selama operasi Pop (tekan kembali), layar atas dihapus dari tumpukan, dimusnahkan atau masuk ke memori, dan layar sebelumnya menjadi aktif. iOS secara default memusnahkan ViewController yang di-pop, membebaskan memori. Android dapat menyimpan Fragment di back stack dengan kemungkinan pemulihan tanpa pembuatan ulang.
Kedalaman tumpukan memengaruhi kinerja: setiap layar di tumpukan mengonsumsi memori. Disarankan untuk tidak menyimpan lebih dari 10 layar di tumpukan. Untuk navigasi mendalam, gunakan PopToRoot atau mulai ulang tumpukan dengan layar root baru. Navigation Component di Android secara otomatis mengelola status tumpukan melalui SavedStateHandle.
UINavigationController — kontroler kontainer iOS yang mengelola tumpukan UIViewController. Ini secara otomatis menampilkan bilah navigasi (navigation bar) dengan judul layar saat ini dan tombol kembali. Animasi Push default — geser dari kanan ke kiri, menciptakan perasaan tenggelam dalam konten bagi pengguna.
Penambahan layar dilakukan melalui pushViewController(_:animated:). Penghapusan — melalui popViewController(animated:). Untuk kembali ke layar root, gunakan popToRootViewController(animated:). UINavigationController juga mendukung manajemen tumpukan secara programatis melalui properti viewControllers — larik semua kontroler dalam tumpukan.
Bilah navigasi berisi judul layar (title), tombol kembali, dan tombol aksi opsional. Mulai iOS 11, Large Titles (prefersLargeTitles) memungkinkan menampilkan judul dengan font yang diperbesar, yang mengecil secara animasi saat digulir. Ini meningkatkan hierarki navigasi dan memberi tahu pengguna tentang bagian saat ini.
let detailVC = DetailViewController()
detailVC.title = "Item Details"
navigationController?.pushViewController(detailVC, animated: true)
// Kembali ke layar sebelumnya
navigationController?.popViewController(animated: true)
// Kembali ke layar root
navigationController?.popToRootViewController(animated: true)
Navigation Component — pustaka Android Jetpack untuk navigasi deklaratif. Ini menyediakan NavController yang mengelola fragmen atau layar Compose melalui grafik navigasi (nav_graph). Push di Android analog dengan iOS: setiap Fragment baru ditambahkan ke back stack, dan tombol kembali mengembalikannya.
NavHost — kontainer yang menampilkan tujuan saat ini dari NavGraph. NavGraph — file XML yang mendeskripsikan semua layar aplikasi dan koneksi di antaranya. Transisi didefinisikan melalui actions dengan menentukan destination dan argumen opsional. Navigation Component secara otomatis menangani tombol kembali sistem, animasi, dan penyimpanan status.
Untuk mentransfer data antar layar, Navigation Component mendukung Safe Args — pembuatan kode kelas argumen type-safe. Alih-alih menempatkan data secara manual ke Bundle, pengembang mendeklarasikan argumen di NavGraph dan menerimanya melalui kelas Directions dan Args yang dihasilkan. Safe Args menghilangkan kesalahan ketidakcocokan tipe dan menyederhanakan refactoring.
// Definisi NavGraph dalam 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) }
}
}
// Navigasi secara programatis
navController.navigate("detail/42")
Kombinasi Bottom Navigation dan navigasi Push — pola umum dalam aplikasi mobile. Setiap tab Bottom Navigation memiliki tumpukan layar sendiri. Navigation Component mendukung ini melalui NavHost per tab atau satu NavHost dengan grafik terpisah untuk setiap tab. Berpindah tab tidak mereset status tumpukan Push.
Push Presentation dan Modal Presentation menyelesaikan tugas navigasi yang berbeda. Push ditujukan untuk melihat konten secara berurutan, di mana setiap layar baru memperdalam konteks. Modal — untuk tugas fokus yang memerlukan penyelesaian. Dalam praktiknya, penting untuk memilih pola yang tepat untuk skenario tertentu.
Kriteria pemilihan utama: jika pengguna harus dapat kembali dengan bebas tanpa kehilangan konteks — pilih Push. Jika tugas bersifat sementara dan memblokir konten utama (formulir, otentikasi) — gunakan Modal. Mencampur pola pada satu layar (Push di dalam Modal) diperbolehkan, tetapi memerlukan hierarki visual yang jelas.
Kesalahan adalah menggunakan Modal untuk urutan layar yang secara logis merupakan bagian dari aliran utama. Misalnya, wizard pembuatan pesanan (Langkah 1 → Langkah 2 → Langkah 3) lebih baik diimplementasikan melalui Push di dalam kontainer modal daripada melalui rantai jendela modal. Ini mempertahankan hierarki navigasi dan prediktabilitas kembali.
Mari kita lihat implementasi lengkap navigasi Push di kedua platform. Contoh Swift mendemonstrasikan UINavigationController dengan manajemen tumpukan programatis dan penanganan tautan dalam. Contoh Kotlin menunjukkan Navigation Component dengan NavHost, argumen, dan animasi.
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() })
}
}
}
Contoh menunjukkan navigasi Push dasar: daftar → detail. iOS menggunakan storyboard dan UINavigationController dengan transfer data manual. Android menggunakan NavHost dengan argumen type-safe dan manajemen back stack otomatis. Kedua pendekatan mendukung tautan dalam, animasi kustom, dan penyimpanan status saat rotasi.
Pertanyaan yang sering diajukan
Push menambahkan layar ke tumpukan UINavigationController dengan tombol kembali. Present membuka jendela modal tanpa tombol kembali — pengguna harus menutupnya secara eksplisit. Push cocok untuk konten berurutan, Present — untuk tugas fokus. Di SwiftUI, Push sesuai dengan NavigationLink, dan Present dengan .sheet.
Navigation Component menyediakan metode popBackStack hingga titik tertentu dan popUpTo untuk membersihkan tumpukan. Untuk mencegah luapan tumpukan, gunakan popUpTo(startDestination) { inclusive = true } sebelum navigate. Ini memastikan tumpukan tidak berisi lebih dari 5–7 layar secara bersamaan.
Ya, kombinasi Push dan Modal adalah pola standar. Misalnya, daftar → Push ke detail → Modal untuk otentikasi. Disarankan untuk tidak menempatkan Push di dalam Modal: jendela modal tidak boleh berisi navigasi tumpukan. Jika di dalam jendela modal diperlukan urutan layar — gunakan Push di dalam kontainer modal.
Deep Links dalam navigasi Push membuka aplikasi di layar tertentu. iOS menggunakan skema URL dan Universal Links dengan UINavigationController. Android menggunakan Intent Filters dengan NavDeepLink. Dalam kedua kasus, sistem mem-parsing tautan dan membuat tumpukan navigasi ke layar target, mempertahankan kemampuan untuk kembali.
iOS menggunakan animasi geser standar yang dapat disesuaikan melalui UINavigationControllerDelegate. Android Navigation Component mendukung animasi kustom melalui sumber daya XML (slide_in_right, slide_out_left). Untuk Compose, gunakan AnimatedNavHost dengan pengubah animateItemPlacement.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga