我有一个tabBar控制器作为父级,我用navigationController推送一个视图控制器。然后向其展示上面的2个其他视图控制器。它像Tabbar(homeController) - > Child1(推) - >孩子2(呈现) - > child3(呈现)。并使用计时器解雇我的最后一个childViewController。当它被解雇时我想回到tabBarController(home)。
let parent = self.presentingViewController
self.dismiss(animated: false, completion: {
parent?.present(vc, animated: true, completion: nil)
})
我将上面的代码放在我的第二个子ViewController中。但它回到了child1 viewContoller。需要一些帮助。
答案 0 :(得分:1)
如果您正在使用故事板,那么首先在要返回的视图控制器上设置一个展开segue(在这种情况下为tabBarController),如下所示:
@IBAction func unwindToTop(segue:UIStoryboardSegue) { }
(你可以把它叫做你想要的,只要你开始'unwindTo')
然后在界面构建器中创建一个展开segue(直接来自对象,如按钮或更通用的视图控制器本身)到视图控制器的出口,并选择应该出现在列表中的展开segue。
然后,当通过故事板项目或在代码中手动执行此segue时,您将返回到定义展开segue的视图控制器。系统将为您完成所有后退遍历。
答案 1 :(得分:0)
最后在这里找到另一个选项。
self.view.window!.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
以上代码将解除所有呈现的ViewControllers。如果你把它放在最少的孩子(我的孩子3),它将自动解雇我的孩子2,孩子3。
let parentVC = self.presentingViewController
if let tabParent = parentVC as? UITabBarController, let firstNav = tabParent.viewControllers![0] as? UINavigationController {
//present child 2
self.present(vc, animated: true, completion: {
firstNav.popToRootViewController(animated: false)// pop to my rootVC
})
}
答案 2 :(得分:-1)
您应该检查popToRootViewController方法。