Dismiss pushed view from within Navigation Controller

24,732

Solution 1

Obtain a reference to your UINavigationController and call

- (UIViewController *)popViewControllerAnimated:(BOOL)animated

on it.

Solution 2

In Swift it would be calling the method

navigationController?.popViewController(animated: true)

Solution 3

If we use push segue, then use popViewController

@IBAction func backButtonClicked(_ sender: Any) {
    self.navigationController?.popViewController(animated: false)
}

Solution 4

In swift you can also call:

self.navigationController?.popToRootViewControllerAnimated(true)

Solution 5

On Objective-C is

[self.navigationController popViewControllerAnimated:YES];

for a jump to the first root controller

[self.navigationController popToRootViewControllerAnimated:YES];

or is a possible move to the specific controller

[self.navigationController popToViewController:(nonnull UIViewController *) animated:(BOOL)];

animation specific animation process of move the controller. If the animation is false the controller will appear without animations. The UIViewController must be from one which is on the stack.

Share:
24,732
Darren
Author by

Darren

Updated on July 09, 2022

Comments

  • Darren
    Darren almost 2 years

    I have a Navigation Controller with a View Controller displaying a button. The button is linked to another View Controller using a push segue which automatically adds a top navigation bar with a back button. This all works fine. Pressing the back button slides off the 2nd view and returns to the 1st.

    I have a button on the 2nd View Controller, that when pressed runs some code and a delegate call back to the 1st View Controller. Again this works fine.

    Now I just need to dismiss the 2nd pushed View from code as if the back button was pressed. I have tried using dismissModalViewCcontrollerAnimated and dismissViewControllerAnimated, however they both dismiss the whole Navigation Controller which removes view 2 and 1 (returning bak to my main menu).

    Whats the correct way to slide off the view.