如果推送并呈现多个viewControllers,如何移动到parentViewController?

时间:2018-01-10 14:59:45

标签: ios swift pushviewcontroller presentviewcontroller dismissviewcontroller

我有一个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。需要一些帮助。

3 个答案:

答案 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)