Push Presentation — образац навигације у мобилним апликацијама при којем се сваки нови екран додаје у стек навигације изнад претходног. Корисник може секвенцијално да прелази напред кроз садржај и да се враћа назад помоћу системског дугмета или превлачења. Према Apple Developer, 2025, UINavigationController се користи у 85% iOS апликација као основни навигациони образац. У Android-у слична функционалност се реализује кроз FragmentManager и NavController из Navigation Component-а.
Главно
Push Presentation — је механизам навигације при којем се сваки нови екран поставља на врх стека, а претходни екран остаје у меморији испод њега. Корисник продире у дубину садржаја, секвенцијално отварајући детаљне екране, а дугме назад га враћа на претходни корак.
Архитектура Push навигације заснива се на структури података LIFO (Last In, First Out). Нови екран се увек додаје на крај стека, а уклањање се врши само са врха. Ово гарантује предвидљиво понашање: корисник увек зна да ће га дугме назад вратити тачно један корак уназад. Навигациони стек може садржати од 2 до 10+ екрана у зависности од сложености апликације.
Push Presentation је основни образац у апликацијама са хијерархијским садржајем: вести, каталози производа, вишеслојни менији и документација. Према Material Design-у, стекова навигација је погодна за сценарије у којима корисник истражује садржај од општег ка посебном, а сваки следећи екран продубљује разумевање теме.
Навигациони стек — је уређен скуп екрана, где сваки елемент чува стање свог ViewController-а или Fragment-а. При Push операцији нови екран се додаје у стек, његов приказ се анимира (слајд са десне стране у iOS-у, слајд одоздо или Fade у Android-у) и постаје активан.
При Pop операцији (притисак назад) горњи екран се уклања из стека, уништава или одлази у меморију, а претходни екран постаје активан. iOS подразумевано уништава popped ViewController, ослобађајући меморију. Android може да сачува Fragment у back stack-у са могућношћу враћања без поновног креирања.
Дубина стека утиче на перформансе: сваки екран у стеку троши меморију. Препоручује се да не чувате више од 10 екрана у стеку. За дубоку навигацију користите PopToRoot или поновно покретање стека са новим root екраном. Navigation Component у Android-у аутоматски управља стањем стека кроз SavedStateHandle.
UINavigationController — контејнерски контролер iOS-а који управља стеком UIViewController-а. Он аутоматски приказује навигациону траку (navigation bar) са насловом тренутног екрана и дугметом за повратак. Подразумевана Push анимација — слајд са десна на лево, стварајући код корисника осећај урањања у садржај.
Додавање екрана се врши кроз pushViewController(_:animated:). Уклањање — кроз popViewController(animated:). За повратак на root екран користи се popToRootViewController(animated:). UINavigationController такође подржава програмско управљање стеком кроз својство viewControllers — низ свих контролера у стекy.
Навигациона трака садржи наслов екрана (title), дугме назад и опциона дугмад за акције. Од iOS 11, Large Titles (prefersLargeTitles) омогућавају приказ наслова увећаним фонтом који се анимирано смањује при скроловању. Ово побољшава навигациону хијерархију и информише корисника о тренутној секцији.
let detailVC = DetailViewController()
detailVC.title = "Item Details"
navigationController?.pushViewController(detailVC, animated: true)
// Повратак на претходни екран
navigationController?.popViewController(animated: true)
// Повратак на root екран
navigationController?.popToRootViewController(animated: true)
Navigation Component — библиотека Android Jetpack за декларативну навигацију. Она пружа NavController, који управља фрагментима или compose екранима кроз граф навигације (nav_graph). Push у Android-у је аналоган iOS-у: сваки нови Fragment се додаје у back stack, а дугме назад враћа претходни.
NavHost — контејнер који приказује тренутну дестинацију из NavGraph-а. NavGraph — XML фајл који описује све екране апликације и везе између њих. Прелази се дефинишу кроз actions са навођењем destination и опционих аргумената. Navigation Component аутоматски обрађује системско дугме назад, анимације и чување стања.
За пренос података између екрана Navigation Component подржава Safe Args — генерисање кода type-safe класа аргумената. Уместо ручног постављања података у Bundle, програмер декларише аргументе у NavGraph-у и прима их кроз генерисане Directions и Args класе. Safe Args елиминише грешке неусаглашености типова и поједностављује рефакторисање.
// Дефиниција NavGraph-а у 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) }
}
}
// Програмска навигација
navController.navigate("detail/42")
Комбинација Bottom Navigation и Push навигације — чест образац у мобилним апликацијама. Свака картица Bottom Navigation има сопствени стек екрана. Navigation Component подржава ово кроз NavHost per tab или јединствени NavHost са одвојеним графовима за сваку картицу. Пребацивање картица не ресетује стање Push стекова.
Push Presentation и Modal Presentation решавају различите задатке навигације. Push је намењен за секвенцијални преглед садржаја, где сваки нови екран продубљује контекст. Modal — за фокусне задатке који захтевају завршетак. У пракси је важно одабрати прави образац за конкретан сценарио.
Главни критеријуми избора: ако корисник треба слободно да се враћа назад без губитка контекста — изаберите Push. Ако је задатак привремен и блокира главни садржај (форма, ауторизација) — користите Modal. Мешање образаца на једном екрану (Push унутар Modal) је дозвољено, али захтева јасну визуелну хијерархију.
Грешка је коришћење Modal за секвенце екрана које су логички део главног тока. На пример, асистент за креирање поруџбине (Корак 1 → Корак 2 → Корак 3) је боље реализовати кроз Push унутар модалног контејнера, а не кроз ланац модалних прозора. Ово чува навигациону хијерархију и предвидљивост повратка.
Размотримо потпуну имплементацију Push навигације на обе платформе. Swift пример демонстрира UINavigationController са програмским управљањем стеком и обрадом дубоких линкова. Kotlin пример приказује Navigation Component са NavHost-ом, аргументима и анимацијама.
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() })
}
}
}
Примери показују основну Push навигацију: листа → детаљи. iOS користи storyboard-ове и UINavigationController са ручним преносом података. Android користи NavHost са type-safe аргументима и аутоматским управљањем back stack-ом. Оба приступа подржавају дубоке линкове, прилагођене анимације и чување стања при ротацији.
Често постављана питања
Push додаје екран у стек UINavigationController-а са дугметом за повратак. Present отвара модални прозор без дугмета назад — корисник мора експлицитно да га затвори. Push је погодан за секвенцијални садржај, Present — за фокусне задатке. У SwiftUI-ју Push одговара NavigationLink-у, а Present — .sheet-у.
Navigation Component пружа методе popBackStack до одређене тачке и popUpTo за чишћење стека. За спречавање прекорачења стека користите popUpTo(startDestination) { inclusive = true } пре navigate-а. Ово гарантује да стек не садржи више од 5–7 екрана истовремено.
Да, комбинација Push и Modal је стандардни образац. На пример, листа → Push на детаље → Modal за ауторизацију. Препоручује се да не стављате Push унутар Modal: модални прозор не би требало да садржи стекову навигацију. Ако је унутар модалног прозора потребна секвенца екрана — користите Push унутар модалног контејнера.
Deep Links у Push навигацији отварају апликацију на одређеном екрану. iOS користи URL шеме и Universal Links са UINavigationController-ом. Android користи Intent Filters са NavDeepLink-ом. У оба случаја систем анализира линк и креира навигациони стек до циљног екрана, чувајући могућност повратка.
iOS користи стандардну анимацију слајда која се подешава кроз UINavigationControllerDelegate. Android Navigation Component подржава прилагођене анимације кроз XML ресурсе (slide_in_right, slide_out_left). За Compose користите AnimatedNavHost са модификатором animateItemPlacement.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође