![](/img/trans.png)
[英]Perform Segue from Root View Controller of a UIPageViewController
[英]how to perform segue from root view controller to the last view controller in the navigation stack in swift?
我有3个嵌入在导航控制器堆栈中的View控制器。 RedVC,BlueVC和YellowVC。 在每个视图控制器中,都有一个按钮将触发segue
从RedVC,我想导航到BlueVC或YellowVC。 从RedVC到BlueVC到YellowVC的所有segue都使用推送显示segue连接,没有模态显示。
如果路由是这样,则没有问题:RedVC-> BlueVC-> YellowVC
但是如果我将show segue从redVC直接推到YellowVC,YellowVC中的“后退”按钮会将我定向回到RedVC
我想要,如果我从RedVC切换到YellowVC,我希望YellowVC中的“后退”按钮会将我定向到BlueVC,而不是RedVC。
如何做到这一点?
如果您要从RedVC迁移到YellowVC,则在点击yellowVC后就无法回到BlueVC。
但这可以通过以下方式实现:
在BlueVC中保留一个名为: shouldShowYellowDirectly
的标志变量,并在prepareForSegueMethod中从RedVC设置其值为true
。
在BlueVC中执行以下操作:
override func viewDidLoad() {
super.viewDidLoad()
if shouldShowYellowDirectly{
performSegue(withIdentifier: "showYellow", sender: self)
}
}
它将显示BlueVC秒。
如果要直接从RedVC迁移到YellowVC (跳过BlueVC ),将排除BlueVC初始化的可能性。 因此,当您从YellowVC执行向后导航时,必须强制初始化BlueVC以实现所需的功能。
尽管不建议这样做,因为它不会遵循默认的VC生命周期。 但是,如果要这样做,则需要明确照顾其行为。 例如-持久化数据。
一种解决方案是在红色和蓝色之间添加另一种非动画序列。
取消选中属性检查器中的“动画”复选框。
要变黄,请先执行此segue并传递一个true
标志,该标志指示我们是否要从黄变蓝。 蓝色,处理此标志。 如果该标志为真,则将动画设置为黄色。 如果我们只是要变蓝,则将执行动画化为蓝色的segue,并且标志将为false
。
另一个解决方案是以编程方式做到这一点而不会引起争执。 为您的蓝色和黄色VC提供一些标识符:
要变为黄色,请实例化您的蓝色和黄色VC:
let storyboard = UIStoryboard.main!
let blue = storyboard.instantiateViewController(withIdentifier: "Blue")
let yellow = storyboard.instantiateViewController(withIdentifier: "Yellow")
然后将蓝色动画化,然后将黄色动画化:
navigationController?.pushViewController(blue, animated: true)
navigationController?.pushViewController(yellow, animated: false)
是的,您可以在prepareForSegue方法中插入blueVC。 您可以按照以下代码
override func performSegueWithIdentifier(identifier: String?, sender: AnyObject?) {
super.performSegueWithIdentifier(identifier, sender: sender);
if identifier == "xyz" {
var navArray : [AnyObject]! = self.navigationController!.viewControllers
navArray.insert(blueVC, atIndex: navStackArray.count - 2)
self.navigationController!.setViewControllers(navArray, animated:false)
}
}
在上面的blueVC中,您需要包装该对象并将其放在那里。 希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.