我有一个基于标签的应用。我想知道是否有可能将用户从任何地方展开到当前标签的根目录。
我的应用程序是这样构建的: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
因为它会搞乱导航堆栈
答案 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];