UINavigationController назад более чем на один шаг
Можно ли использовать более одного viewcontroller в UINavigationController? предположим, я хочу сделать 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) }