Push Presentation у мобилном развоју: шта је то, стек екрана

Аутор: IT Sectr Објављено: 2026-06-09 Време читања: 5 мин

Push Presentation — образац навигације у мобилним апликацијама при којем се сваки нови екран додаје у стек навигације изнад претходног. Корисник може секвенцијално да прелази напред кроз садржај и да се враћа назад помоћу системског дугмета или превлачења. Према Apple Developer, 2025, UINavigationController се користи у 85% iOS апликација као основни навигациони образац. У Android-у слична функционалност се реализује кроз FragmentManager и NavController из Navigation Component-а.

Главно

  • Push Presentation — додавање екрана у навигациони стек са аутоматским дугметом за повратак на претходни екран.
  • UINavigationController у iOS-у управља стеком UIViewController-а кроз методе pushViewController и popViewController.
  • Android Navigation Component користи NavController са NavHost-ом и графовима навигације у XML или Compose формату.
  • Стекова навигација чува историју прелаза, омогућавајући кориснику да се врати на било који претходни екран.
  • Deep linking у Push навигацији се подржава кроз обраду Intent-а и NavDeepLink у Android-у и URL шеме у iOS-у.

Шта је Push Presentation?

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.

Push навигација у iOS-у: UINavigationController

UINavigationController — контејнерски контролер iOS-а који управља стеком UIViewController-а. Он аутоматски приказује навигациону траку (navigation bar) са насловом тренутног екрана и дугметом за повратак. Подразумевана Push анимација — слајд са десна на лево, стварајући код корисника осећај урањања у садржај.

Управљање стеком

Додавање екрана се врши кроз pushViewController(_:animated:). Уклањање — кроз popViewController(animated:). За повратак на root екран користи се popToRootViewController(animated:). UINavigationController такође подржава програмско управљање стеком кроз својство viewControllers — низ свих контролера у стекy.

Navigation Bar и Large Titles

Навигациона трака садржи наслов екрана (title), дугме назад и опциона дугмад за акције. Од iOS 11, Large Titles (prefersLargeTitles) омогућавају приказ наслова увећаним фонтом који се анимирано смањује при скроловању. Ово побољшава навигациону хијерархију и информише корисника о тренутној секцији.

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

// Повратак на претходни екран
navigationController?.popViewController(animated: true)

// Повратак на root екран
navigationController?.popToRootViewController(animated: true)

Push навигација у Android-у: Navigation Component

Navigation Component — библиотека Android Jetpack за декларативну навигацију. Она пружа NavController, који управља фрагментима или compose екранима кроз граф навигације (nav_graph). Push у Android-у је аналоган iOS-у: сваки нови Fragment се додаје у back stack, а дугме назад враћа претходни.

NavHost и NavGraph

NavHost — контејнер који приказује тренутну дестинацију из NavGraph-а. NavGraph — XML фајл који описује све екране апликације и везе између њих. Прелази се дефинишу кроз actions са навођењем destination и опционих аргумената. Navigation Component аутоматски обрађује системско дугме назад, анимације и чување стања.

Аргументи и Safe Args

За пренос података између екрана Navigation Component подржава Safe Args — генерисање кода type-safe класа аргумената. Уместо ручног постављања података у Bundle, програмер декларише аргументе у NavGraph-у и прима их кроз генерисане Directions и Args класе. Safe Args елиминише грешке неусаглашености типова и поједностављује рефакторисање.

kotlin
// Дефиниција 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")

BottomNavigation са Push стеком

Комбинација Bottom Navigation и Push навигације — чест образац у мобилним апликацијама. Свака картица Bottom Navigation има сопствени стек екрана. Navigation Component подржава ово кроз NavHost per tab или јединствени NavHost са одвојеним графовима за сваку картицу. Пребацивање картица не ресетује стање Push стекова.

Push Presentation vs Modal Presentation

Push Presentation и Modal Presentation решавају различите задатке навигације. Push је намењен за секвенцијални преглед садржаја, где сваки нови екран продубљује контекст. Modal — за фокусне задатке који захтевају завршетак. У пракси је важно одабрати прави образац за конкретан сценарио.

Главни критеријуми избора: ако корисник треба слободно да се враћа назад без губитка контекста — изаберите Push. Ако је задатак привремен и блокира главни садржај (форма, ауторизација) — користите Modal. Мешање образаца на једном екрану (Push унутар Modal) је дозвољено, али захтева јасну визуелну хијерархију.

Грешка је коришћење Modal за секвенце екрана које су логички део главног тока. На пример, асистент за креирање поруџбине (Корак 1 → Корак 2 → Корак 3) је боље реализовати кроз Push унутар модалног контејнера, а не кроз ланац модалних прозора. Ово чува навигациону хијерархију и предвидљивост повратка.

Примери имплементације у Swift-у и Kotlin-у

Размотримо потпуну имплементацију Push навигације на обе платформе. Swift пример демонстрира UINavigationController са програмским управљањем стеком и обрадом дубоких линкова. Kotlin пример приказује Navigation Component са NavHost-ом, аргументима и анимацијама.

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

Примери показују основну Push навигацију: листа → детаљи. iOS користи storyboard-ове и UINavigationController са ручним преносом података. Android користи NavHost са type-safe аргументима и аутоматским управљањем back stack-ом. Оба приступа подржавају дубоке линкове, прилагођене анимације и чување стања при ротацији.

Често постављана питања

По чему се Push Presentation разликује од Present-а у iOS-у?

Push додаје екран у стек UINavigationController-а са дугметом за повратак. Present отвара модални прозор без дугмета назад — корисник мора експлицитно да га затвори. Push је погодан за секвенцијални садржај, Present — за фокусне задатке. У SwiftUI-ју Push одговара NavigationLink-у, а Present — .sheet-у.

Како управљати дубоким стеком навигације у Android-у?

Navigation Component пружа методе popBackStack до одређене тачке и popUpTo за чишћење стека. За спречавање прекорачења стека користите popUpTo(startDestination) { inclusive = true } пре navigate-а. Ово гарантује да стек не садржи више од 5–7 екрана истовремено.

Може ли се комбиновати Push и Modal у једној навигацији?

Да, комбинација Push и Modal је стандардни образац. На пример, листа → Push на детаље → Modal за ауторизацију. Препоручује се да не стављате Push унутар Modal: модални прозор не би требало да садржи стекову навигацију. Ако је унутар модалног прозора потребна секвенца екрана — користите Push унутар модалног контејнера.

Како Push Presentation ради са Deep Links?

Deep Links у Push навигацији отварају апликацију на одређеном екрану. iOS користи URL шеме и Universal Links са UINavigationController-ом. Android користи Intent Filters са NavDeepLink-ом. У оба случаја систем анализира линк и креира навигациони стек до циљног екрана, чувајући могућност повратка.

Како анимирати Push прелазе?

iOS користи стандардну анимацију слајда која се подешава кроз UINavigationControllerDelegate. Android Navigation Component подржава прилагођене анимације кроз XML ресурсе (slide_in_right, slide_out_left). За Compose користите AnimatedNavHost са модификатором animateItemPlacement.

Закључак

  • Push Presentation — образац стекове навигације, који додаје сваки нови екран изнад претходног са дугметом за повратак.
  • UINavigationController управља стеком у iOS-у кроз pushViewController и popViewController са навигационом траком.
  • Android Navigation Component пружа NavHost, NavGraph и Safe Args за type-safe навигацију.
  • Push се разликује од Modal-а по одсуству блокирања садржаја и слободном повратку по стекy.
  • Дубина стека не би требало да прелази 10 екрана за оптималне перформансе апликације.
  • Deep Links у Push навигацији се подржавају кроз URL шеме и NavDeepLink са чувањем историје.
  • Препоручује се коришћење Push за хијерархијски садржај и Modal — за фокусне задатке.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође