UINavigationController назад более чем на один шаг


Можно ли использовать более одного viewcontroller в UINavigationController? предположим, я хочу сделать 2 шага назад.

2 2

2 ответа:

Да, вы можете достичь этого, сделав что-то вроде

//Your navigation controller
UINavigationController *nav;

//Get the view controller that is 2 step behind
UIViewController *controller = [nav.viewControllers objectAtIndex:nav.viewControllers.count - 2];

//Go to that controller
[nav popToViewController:controller animated:YES];

Swift

В swift то же решение, представленное Омаром:

// Get the previous Controller.
let targetController: UIViewController = navigationController!.viewControllers[navigationController!.viewControllers.count - 2]

// And go to that Controller
navigationController?.popToViewController(targetController, animated: true)

В моем случае мне нужно поддержать 2 контроллера, поэтому я должен взять 3-й бэк в стеке. Мое реальное решение было:

// obtaining origin controller
let controller: UIViewController = navigationController!.viewControllers[navigationController!.viewControllers.count - 2]

// If was the expected controller (An enroll action)
if controller is CreateChatViewController {

    // I get the previous controller from it, in this case, the 3rd back in stack
    let newControllerTarget = navigationController!.viewControllers[navigationController!.viewControllers.count - 3]

    // And finally sends back to desired controller
    navigationController?.popToViewController(newControllerTarget, animated: true)
}