Swift ios 从任何地方展开到根 ViewController 选项卡

Posted

技术标签:

【中文标题】Swift ios 从任何地方展开到根 ViewController 选项卡【英文标题】:Swift ios unwind to root ViewController tab from anywhere 【发布时间】:2016-11-09 20:54:06 【问题描述】:

我有一个基于标签的应用程序。而且我想知道是否可以将用户从任何地方展开到当前选项卡的根目录。

我的应用程序是这样构建的:TabController -> (tabs) -> navigationController -> vc etc..

假设我在我的应用程序中按下了选项卡 4。现在,我深入研究了两个视图控制器,最终得到了一个模态呈现的 VC。现在我想直接回到标签的根目录:

tab 4 -> navigationController -> rootVC -> pushVC -> pushVC -> modalVc

所以我例如从 modalVcrootVC

我知道我可以执行this 之类的操作,但我想从 tab4 中的任何 VC 转到 rootVC,使用该技术将迫使我在 tab 4 中的所有子 VC 上创建一个展开 segue

我正在使用通知,当用户按下通知时,我想将用户从任何地方带到 rootVC。​​

并使用类似的东西:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let destinationViewController = storyboard.instantiateViewController(withIdentifier: "accountVc") as? AccountViewController
                      navInTab.pushViewController(destinationViewController!, animated: false)

不适用于例如:vc -> vc -> modalVc

因为它会弄乱导航堆栈

【问题讨论】:

你到底想达到什么目的? @Joe 不适用于我的模态 VC 【参考方案1】:

您可以弹出到导航堆栈的根,或者弹出到堆栈中的第 n 个元素,或者用不同的堆栈替换视图控制器堆栈。

您可以在 navigationController 上使用popToRootViewController 来返回导航堆栈的最根目录。或者假设你想回到堆栈中的第一个 VC,例如,你会做类似的事情

let controllerStack = self.navigationController?.viewControllers
_ = self.navigationController?.popToViewController((controllerStack?[0])!, animated: true)

或者您可以用新的控制器堆栈替换视图控制器的导航堆栈,即

NSMutableArray *controllerStack = [NSMutableArray arrayWithArray:navigationController.viewControllers];
// Replace the source controller with the destination controller, wherever the source may be
[controllerStack replaceObjectAtIndex:[controllerStack indexOfObject:sourceViewController] withObject:destinationController];

// Assign the updated stack with animation
[navigationController setViewControllers:controllerStack animated:YES];

【讨论】:

尝试使用您的第一个示例时出现错误:不平衡调用开始/结束 App 外观转换 你能提供第二个例子吗?

以上是关于Swift ios 从任何地方展开到根 ViewController 选项卡的主要内容,如果未能解决你的问题,请参考以下文章

在展开的 segue 中弹出到根视图

同时切换 Tabs 和重置 Nav 的 View Controllers - Swift iOS

从 UINavigationVController 导航以模态方式呈现到根 UINavigationVController - swift

从 Swift 中的其他类更改 ViewController 的对象

Swift - 在展开可选值时意外发现 nil - 从委托调用变量

如何使用iOS和Swift从Google SDK获取附近的地点?