Как вы видите на изображении выше, у меня есть контроллер представления (A) с переходом к контроллеру навигации. Я хочу выполнить этот переход, который приведет меня к просмотру контроллера (B). Я знаю, что некоторые из вас скажут, что просто переходите между (A) и (B), но это не то, что я хочу.
Я хочу иметь возможность вернуться не к (A), а к предыдущему контроллеру представления в стеке контроллеров навигации.
Заранее спасибо.





У вас есть 2 варианта
1-
сделайте переход к navigationController и в VC, который находится перед B, установите флаг, скажем, в viewDidLoad и нажмите VCB
2-
в коде создайте navigationController
let nav = /////
nav.viewControllers = [beforeBVC,VCB]
VCB имеет индекс 1, поэтому он является вершиной стека, когда вы представляете его из VC, который является источником перехода B, будет отображаться
будет показано, что спина возвращается от B к VC перед этим
Возможно, вы могли бы напрямую вставить ViewController в стек навигации.
self.navigationController?.pushViewController(viewController2, animated: true)
Это просто модификация ответа Sh_Khan. Его ответ был правильным, и я попробовал оба его метода, чтобы добиться того, о чем прошу, и мне это удалось.
Однако я понял, что мне действительно не нужно ни создавать контроллер навигации программно, ни устанавливать флаг и проверять viewDidLoad.
Все, что мне нужно сделать, это применить его второй метод внутри функции prepareForSegue.
Пример:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let navController = segue.destination as! UINavigationController
let BVC = UIStoryboard(name:"Main", bundle:nil).instantiateViewController(withIdentifier: "BVC")
navController.viewControllers.append(BVC)
}
Все заслуги Ш_Хана, так как он действительно дал ответ. Спасибо.
Мне нравится второй. Но я не знаю, как я смогу перейти к VCB, если я устанавливаю другой VC перед ним в nav.viewControllers. Возможно ли это, или мне нужно сделать больше шагов, чтобы это сделать.