0

我有一个 tabBar 控制器作为父级,我正在推送一个带有 navigationController 的视图控制器。然后向它展示上面的 2 个其他视图控制器。它就像 Tabbar(homeController) -> Child1(push) -> Child 2(presenting) -> child3(presenting)。我使用计时器解雇了我的最后一个 childViewController。当它被解雇时,我想回到 tabBarController(home)。

let parent = self.presentingViewController
self.dismiss(animated: false, completion: {
    parent?.present(vc, animated: true, completion: nil)
})

我把上面的代码放在我的第二个子视图控制器中。但它又回到了 child1 viewContoller。在这里需要一些帮助。

4

3 回答 3

1

如果您使用的是情节提要,则首先在要返回的视图控制器上设置展开转场(在这种情况下为 tabBarController),如下所示:

@IBAction func unwindToTop(segue:UIStoryboardSegue) { }

(只要你启动它'unwindTo',你就可以称之为你想要的)

然后在界面生成器中创建一个展开转场(直接从按钮等对象或更通用的视图控制器本身)到视图控制器的出口,并选择应该出现在列表中的展开转场。

然后,当这个 segue 被执行时,无论是通过故事板项目还是在代码中手动执行,您都将返回到定义展开 segue 的视图控制器。系统将为您完成所有的回溯。

于 2018-01-10T16:33:38.600 回答
0

终于在这里找到了另一种选择。

self.view.window!.rootViewController?.dismissViewControllerAnimated(false, completion: nil)

上面的代码将关闭所有呈现的 ViewController。如果你把它放在至少一个孩子(在我的情况下是孩子 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
            })
        }
于 2018-01-12T06:47:53.720 回答
-1

您应该检查 popToRootViewController 方法。

https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621855-poptorootviewcontroller

于 2018-01-10T15:09:39.277 回答