我正在尝试呈现两个视图控制器。我试图避免一个接一个地呈现,因为这不能提供良好的用户体验。
我正在使用storyboards / segues来呈现视图控制器,每个视图控制器都嵌入在导航控制器中。
行为应该是:
视图控制器1呈现视图控制器2 - 但是当视图控制器2解散时,我希望视图控制器3是向用户显示的视图控制器。理想情况下,也可以忽略查看控制器1。
我知道我可以通过子视图完成此操作。但我理想的是想通过操纵导航堆栈来学习它是如何完成的。
答案 0 :(得分:1)
我认为你不能用segue
做你想做的事,但当然你可以用一些代码做到这一点......
这将(例如,在按钮上)直接从当前的ViewController(称为vc1
)到ViewController2
执行标准的滑入式导航控制器动画,但是“插入”{{ 1}}进入堆栈。点按“返回”按钮会将您从ViewController3
转到vc2
到vc3
。
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