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

时间:2016-11-09 20:54:07

标签: ios swift uinavigationcontroller segue

我有一个基于标签的应用。我想知道是否有可能将用户从任何地方展开到当前标签的根目录。

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

因此,我想在我的应用中按下标签4。现在我挖掘两个视图控制器并最终以模态呈现VC。现在我想直接回到选项卡的根目录:

标签4 - > navigationController - > rootVC - > pushVC - > pushVC - > modalVc

所以我例如从 modalVc rootVC

我知道我可以做this这样的事情,但是我想从tab4中的任何VC转到rootVC,并且使用这种技术会迫使我在我所有的孩子VC中创建一个放松的segue标签4

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

使用类似的东西:

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

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

因为它会搞乱导航堆栈

1 个答案:

答案 0 :(得分:0)

您可以弹出导航堆栈的根目录,或弹出到堆栈中的第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];