Bird
Raised Fist0
iOS Swiftmobile~5 mins

Navigation path management in iOS Swift

Choose your learning style10 modes available
Introduction

Navigation path management helps users move between screens in an app smoothly. It keeps track of where you are and where you can go next.

When you want to open a new screen after a button tap.
When you want to go back to the previous screen.
When you want to jump to a specific screen deep inside the app.
When you want to keep a history of screens visited.
When you want to pass data between screens during navigation.
Syntax
iOS Swift
let navigationController = UINavigationController(rootViewController: firstViewController)
navigationController.pushViewController(secondViewController, animated: true)
navigationController.popViewController(animated: true)

Use pushViewController to go forward to a new screen.

Use popViewController to go back to the previous screen.

Examples
This moves the user to the detail screen with animation.
iOS Swift
navigationController.pushViewController(detailViewController, animated: true)
This returns the user to the previous screen with animation.
iOS Swift
navigationController.popViewController(animated: true)
This sends the user back to the first screen in the navigation stack.
iOS Swift
navigationController.popToRootViewController(animated: true)
Sample App

This app starts with a white screen and a button. When you tap the button, it moves to a gray screen with a "Go Back" button. Tapping "Go Back" returns to the first screen.

iOS Swift
import UIKit

class FirstViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white
    let button = UIButton(type: .system)
    button.setTitle("Go to Second Screen", for: .normal)
    button.addTarget(self, action: #selector(goToSecond), for: .touchUpInside)
    button.frame = CGRect(x: 50, y: 100, width: 200, height: 50)
    view.addSubview(button)
  }

  @objc func goToSecond() {
    let secondVC = SecondViewController()
    navigationController?.pushViewController(secondVC, animated: true)
  }
}

class SecondViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .lightGray
    let button = UIButton(type: .system)
    button.setTitle("Go Back", for: .normal)
    button.addTarget(self, action: #selector(goBack), for: .touchUpInside)
    button.frame = CGRect(x: 50, y: 100, width: 200, height: 50)
    view.addSubview(button)
  }

  @objc func goBack() {
    navigationController?.popViewController(animated: true)
  }
}

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
  var window: UIWindow?

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    let firstVC = FirstViewController()
    let navController = UINavigationController(rootViewController: firstVC)
    window?.rootViewController = navController
    window?.makeKeyAndVisible()
    return true
  }
}
OutputSuccess
Important Notes

Always use a UINavigationController to manage navigation paths in iOS apps.

Navigation controllers keep a stack of screens to allow easy back and forth movement.

Remember to set the rootViewController of the navigation controller to your first screen.

Summary

Navigation path management controls moving between screens in an app.

Use push to go forward and pop to go back.

UINavigationController manages the stack of screens automatically.

Practice

(1/5)
1. What does the pushViewController(_:animated:) method do in a UINavigationController?
easy
A. It removes the current screen from the navigation stack.
B. It adds a new screen on top of the current navigation stack.
C. It replaces the entire navigation stack with a new screen.
D. It resets the navigation stack to the root screen.

Solution

  1. Step 1: Understand pushViewController behavior

    The method adds a new view controller on top of the current stack, showing a new screen.
  2. Step 2: Compare with other navigation actions

    Pop removes the top screen, replace resets stack, so push only adds on top.
  3. Final Answer:

    It adds a new screen on top of the current navigation stack. -> Option B
  4. Quick Check:

    pushViewController = add new screen [OK]
Hint: Push means add a new screen on top [OK]
Common Mistakes:
  • Confusing push with pop (removing screen)
  • Thinking push replaces the whole stack
  • Assuming push resets to root screen
2. Which of the following is the correct Swift syntax to pop the current view controller from a navigation stack?
easy
A. navigationController.popViewController(animated: true)
B. navigationController.pushViewController(animated: true)
C. navigationController.pop(animated: true)
D. navigationController.removeViewController(animated: true)

Solution

  1. Step 1: Recall the correct method name

    The method to remove the top view controller is popViewController(animated:).
  2. Step 2: Check method usage

    It is called on the navigationController instance with a Bool for animation.
  3. Final Answer:

    navigationController.popViewController(animated: true) -> Option A
  4. Quick Check:

    Pop method is popViewController(animated:) [OK]
Hint: Pop removes top screen, method ends with ViewController [OK]
Common Mistakes:
  • Using push instead of pop
  • Using incorrect method names like pop() or removeViewController()
  • Missing the animated parameter
3. Consider this Swift code snippet inside a view controller:
navigationController?.pushViewController(detailVC, animated: true)
navigationController?.popViewController(animated: true)
navigationController?.popViewController(animated: true)
If the navigation stack initially has 3 view controllers, how many view controllers remain after this code runs?
medium
A. 2
B. 1
C. 3
D. 0

Solution

  1. Step 1: Analyze push action

    Push adds 1 view controller, so stack goes from 3 to 4.
  2. Step 2: Analyze two pop actions

    Each pop removes 1 view controller, so 4 - 2 = 2 remain.
  3. Step 3: Confirm final count

    After two pops, 2 view controllers remain on the stack.
  4. Final Answer:

    2 -> Option A
  5. Quick Check:

    3 + 1 - 2 = 2 [OK]
Hint: Push adds 1, each pop removes 1 [OK]
Common Mistakes:
  • Forgetting push adds a controller
  • Counting only one pop instead of two
  • Assuming stack can't go below 3
4. You wrote this code to pop to the root view controller:
navigationController.popToRootViewController(animated: true)
But your app crashes with an error. What is the most likely cause?
medium
A. animated parameter must be false to avoid crashes.
B. popToRootViewController requires a completion handler parameter.
C. navigationController is nil because the view controller is not inside a navigation stack.
D. You must call popViewController instead of popToRootViewController.

Solution

  1. Step 1: Understand navigationController optional

    navigationController is optional and can be nil if the current controller is not inside a navigation stack.
  2. Step 2: Check method requirements

    popToRootViewController(animated:) does not require a completion handler and accepts true or false for animation.
  3. Final Answer:

    navigationController is nil because the view controller is not inside a navigation stack. -> Option C
  4. Quick Check:

    Nil navigationController causes crash [OK]
Hint: Check if navigationController is nil before popping [OK]
Common Mistakes:
  • Assuming popToRootViewController needs completion handler
  • Thinking animated must be false
  • Confusing popViewController with popToRootViewController
5. You want to replace the entire navigation stack with a new set of view controllers: [homeVC, profileVC, settingsVC]. Which code snippet correctly achieves this?
hard
A. navigationController.popViewController(animated: true)
B. navigationController.pushViewController(settingsVC, animated: true)
C. navigationController.popToRootViewController(animated: true)
D. navigationController.setViewControllers([homeVC, profileVC, settingsVC], animated: true)

Solution

  1. Step 1: Identify method to replace stack

    The method setViewControllers(_:animated:) replaces the entire navigation stack with the given array.
  2. Step 2: Compare other options

    Push adds one controller, popToRoot pops to root only, popViewController pops one controller.
  3. Final Answer:

    navigationController.setViewControllers([homeVC, profileVC, settingsVC], animated: true) -> Option D
  4. Quick Check:

    setViewControllers replaces stack [OK]
Hint: Use setViewControllers to replace whole stack [OK]
Common Mistakes:
  • Using push to add instead of replace
  • Using pop methods which only remove controllers
  • Forgetting to pass array of controllers
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard