如何在另一个视图控制器后面显示视图控制器

时间:2017-03-30 12:29:56

标签: objective-c swift3 uinavigationcontroller segue uistoryboard

我正在尝试呈现两个视图控制器。我试图避免一个接一个地呈现,因为这不能提供良好的用户体验。

我正在使用storyboards / segues来呈现视图控制器,每个视图控制器都嵌入在导航控制器中。

行为应该是:

视图控制器1呈现视图控制器2 - 但是当视图控制器2解散时,我希望视图控制器3是向用户显示的视图控制器。理想情况下,也可以忽略查看控制器1。

我知道我可以通过子视图完成此操作。但我理想的是想通过操纵导航堆栈来学习它是如何完成的。

4 个答案:

答案 0 :(得分:1)

我认为你不能用segue做你想做的事,但当然你可以用一些代码做到这一点......

这将(例如,在按钮上)直接从当前的ViewController(称为vc1)到ViewController2执行标准的滑入式导航控制器动画,但是“插入”{{ 1}}进入堆栈。点按“返回”按钮会将您从ViewController3转到vc2vc3

vc1

如果您想从@IBAction func didTap(_ sender: Any) { guard let vc3 = storyboard?.instantiateViewController(withIdentifier: "vc3"), let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") else { return } let vcArray = [self, vc3, vc2] self.navigationController?.setViewControllers(vcArray, animated: true) } 返回vc2并“跳过”vc1,请在vc3添加(例如按钮按钮):< / p>

vc2

答案 1 :(得分:0)

尽管我对您的问题有所了解,请尝试以下方法:

从VC 1和VC 3呈现VC 3立即呈现VC 2(这可以通过将viewController当前代码放在VC 3的ViewDidLoad()中来完成。)

因此,当您解除VC 2时,将显示VC 3并在解除VC 3时,您将被重定向到VC 1。

VC表示ViewController。

答案 2 :(得分:0)

ViewDidLoad()中呈现viewController实际上是一个 坏主意。

您可以展示VC3并添加VC1.view和VC2.view作为VC3视图的子视图,稍后您可以根据需要删除VC1.view和VC2.view,行为将与您期望的相同。

答案 3 :(得分:0)

您需要将要显示的.controllerPresentationStyle设置为.currentContext,并将当前的viewcontroller.definesPresentationContext设置为false

相关问题