Ios 在UINavigationController堆栈中跳过ViewController

Ios 在UINavigationController堆栈中跳过ViewController,ios,swift,Ios,Swift,如上图所示,我有一个视图控制器(a),带有一个导航控制器的序列。我想在离开时执行这个序列,它将我带到查看控制器(B)。我知道你们中的一些人会说,在(a)和(B)之间做一个分段,但这不是我想要的 我希望能够返回到导航控制器堆栈中的上一个视图控制器,而不是(A) 提前感谢您。您有两种选择 一,- 切换到navigationController,在B之前的VC中,设置一个标志,如在viewDidLoad中,并按下VCB 二,- 在代码中创建navigationController let nav =

如上图所示,我有一个视图控制器(a),带有一个导航控制器的序列。我想在离开时执行这个序列,它将我带到查看控制器(B)。我知道你们中的一些人会说,在(a)和(B)之间做一个分段,但这不是我想要的

我希望能够返回到导航控制器堆栈中的上一个视图控制器,而不是(A)

提前感谢您。

您有两种选择

一,-

切换到navigationController,在B之前的VC中,设置一个标志,如在
viewDidLoad
中,并按下VCB

二,-

在代码中创建navigationController

let nav = /////

nav.viewControllers = [beforeBVC,VCB]
你有两个选择

一,-

切换到navigationController,在B之前的VC中,设置一个标志,如在
viewDidLoad
中,并按下VCB

二,-

在代码中创建navigationController

let nav = /////

nav.viewControllers = [beforeBVC,VCB]

您可以直接将ViewController推送到导航堆栈上


self.navigationController?.pushViewController(viewController2,动画:true)
您可以直接将ViewController推到导航堆栈上


self.navigationController?.pushViewController(viewController2,动画:true)

这只是对Shu 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)
}
所有的功劳都归于施汗,因为他才是真正给出答案的人。
谢谢。

这只是对Shu 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)
}
所有的功劳都归于施汗,因为他才是真正给出答案的人。
谢谢。

我喜欢第二个。但我不知道如果我在nav.viewControllers中设置另一个VC之前,如何才能转到VCB。有没有可能,或者我需要做更多的步骤来完成它。VCB在索引1处,所以当你从VC中呈现它时,它是堆栈的顶部,这是序列的来源。B将是显示。返回将显示在itI之前从B返回到VC,就像第二个一样。但我不知道如果我在nav.viewControllers中设置另一个VC之前,如何才能转到VCB。有没有可能,或者我需要做更多的步骤来完成它。VCB在索引1处,所以当你从VC中呈现它时,它是堆栈的顶部,这是序列的来源。B将是显示。返回将显示从B返回到它之前的VC