我的目标是提供一个视图控制器而不直接忽略它的presentingViewController
。
为了更清楚,请考虑以下示例:
参考这个故事板:
假设第一个黑色视图控制器是第一个(初始)控制器,它应该呈现第三个白色视图控制器;问题是白色视图控制器应该关闭第二个橙色视图控制器但不黑色视图控制器,所以它应该表现得像:
如何应用这种行为?
备注:没有导航控制器,它应该存在/关闭,而不是推/弹。
答案 0 :(得分:2)
这是一个方法......
viewDidLoad
中,Orange将White实例化为childVC,并将White的视图添加为“全屏”子视图。这是方法二......
.setViewControllers:animated:
“堆叠视图”,然后直接跳转到最后一个视图。.popViewController
功能。您可以在此处查看这两种方法的工作示例:https://github.com/DonMag/SkipNavigation
答案 1 :(得分:1)
如果黑色VC既呈现橙色又呈现白色,您将拥有您正在寻找的结构。您可以关闭动画,以便橙色可能不可见。
答案 2 :(得分:1)
这可以通过让第一个黑色视图控制器显示第二个橙色视图控制器,然后橙色视图控制器应该呈现第三个白色视图控制器来实现。
但是这引起了一个问题:最终用户会清楚地注意到有两个视图控制器已经顺序呈现。为了解决这个问题,您需要做一个非常简单的技巧,即从第一个视图控制器获取屏幕截图并将其传递给第二个视图控制器,以便在呈现第三个视图控制器时显示它。 / p>
您可以查看this repository,看看它是如何完成的(Swift 3)。
最终输出将是:
答案 3 :(得分:0)
我能想到的最简单的解决方案是隐藏OrangeViewController,然后在使用按钮操作上的代码使用present(_:animated:completion :)的完成回调显示WhiteViewController时显示它。
@IBAction func goToWhite(_ sender: UIButton) {
let orangeViewController = storyboard?.instantiateViewController(withIdentifier: "OrangeViewController")
orangeViewController?.view.isHidden = true
present(orangeViewController!, animated: false)
let whiteViewController = storyboard?.instantiateViewController(withIdentifier: "WhiteViewController")
orangeViewController?.present(whiteViewController!, animated: true) {
orangeViewController?.view.isHidden = false
}
}
答案 4 :(得分:-2)
您可以将导航控制器附加到第一个控制器。然后,单击第一个视图控制器,您可以使用此代码
以任何顺序设置所有视图控制器 var viewControllers = self.navigationController.viewControllers.mutable
/ * Now you can append the other 2 controllers to this array */
viewControllers.append(yellowVC);
viewControllers.append(whiteVC);
self.navigationController.setViewCOntrollers(viewCOntrollers.animated:YES);
您还可以使用上面的代码更改弹出viewCO控制器的顺序。