首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式定义新的导航控制器顺序/堆栈?

以编程方式定义新的导航控制器顺序/堆栈?
EN

Stack Overflow用户
提问于 2016-04-24 14:38:39
回答 2查看 213关注 0票数 0

我有一个NavigationController,下面的VC嵌入其中: VC1 -> VC2 -> VC3 -> VC4 -> VC5。我的问题是,当我从VC5 (编辑完成后)返回到VC3时,我希望以编程的方式将VC4和VC5从堆栈中抛出,也就是说,当用户被送回VC3时,我希望在navagitionBar中“返回”将您带到VC2 (而不是您真正来自的VC5 )。

这在IOS中出现了很多,您想要编辑模型,然后将它们发送回tableView/Collection视图,但是既然编辑已经完成,您就不再希望导航堆栈中的viewControllers编辑了,因为它对UX太混乱了。

在下面的截图中,右上角的VC是VC5:

通过PinViewController (VC3)通过self.performSegueWithIdentifier("backToPins", sender: self)返回到

我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-24 15:05:03

不要用segue回来(流行)。

您应该使用popToViewController并传递特定的viewcontroller作为参数来弹出该视图控制器。

例如,如果你想在第三视图控制器中选择五个,那么你可以做如下的事情。您可以将索引从视图控制器数组更改为不同的视图控制器。

代码语言:javascript
运行
复制
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 3], animated: true);

如果使用segue,这意味着向导航堆栈中添加(推)新视图控制器。在您的示例中,到达第五视图后的堆栈如下,

VC1 - VC2 - VC3 - VC4 - VC5 (top of stack)

如果您执行返回VC3的任务,那么堆栈应该是这样的,

VC1 - VC2 - VC3 - VC4 - VC5 - VC3(top of stack)

如果你弹到VC3,你的堆栈就像,

VC1 - VC2 - VC3 (top of stack)

所以弹出视图的人要回去不要使用segue

希望这会有所帮助:)

票数 1
EN

Stack Overflow用户

发布于 2016-04-24 21:22:13

最好的方法是通过松开海格。

VC3中,您定义了一个适当的展开函数:

代码语言:javascript
运行
复制
@IBAction func unwind(segue:UIStoryboardSegue) {
    if let sourceViewController = segue.sourceViewController as? VC5 {
         let myNewData=sourceViewController.someProperty
         self.someFunctionThatUpdatesScene()
}

然后,在VC5场景中,您可以通过两种方式之一创建一个展开子格。

如果希望直接从对象(如UIButton )触发它,则可以从检查器中的action拖动到场景顶部的exit图标,然后从弹出窗口中选择unwind

如果要以编程方式触发展开,则从左侧资源管理器中的视图控制器对象拖动到退出图标,然后从弹出窗口中选择unwind。现在,您将在资源管理器中看到一个展开的segue,您可以给它一个标识符,就像使用任何segue一样。可以将此标识符与performSegueWithIdentifier一起使用。

这种方法的优点是,您不需要对UINavigationController堆栈的深度做出任何假设,也不需要实现委托/协议来返回数据。

苹果在使用松开垫圈上有一个很好的技术说明

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36824524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档