如果您推送并呈现多个视图控制器,如何移动到 parentViewController?
Posted
技术标签:
【中文标题】如果您推送并呈现多个视图控制器,如何移动到 parentViewController?【英文标题】:How to move to parentViewController if you push and present multiple viewControllers? 【发布时间】:2018-01-10 14:59:44 【问题描述】:我有一个 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)
)
我将上面的代码放在我的第二个子 ViewController 中。但它又回到了 child1 viewContoller。在这里需要一些帮助。
【问题讨论】:
vc
中的parent?.present(vc, animated: true, completion: nil)
是什么?
您是使用故事板还是手动设置所有内容?
@UpholderOfTruth 我正在使用 segue
查看我的回答,了解如何处理。
【参考方案1】:
如果您使用的是故事板,那么首先在您想要返回的视图控制器上设置一个展开转场(在这种情况下为 tabBarController),如下所示:
@IBAction func unwindToTop(segue:UIStoryboardSegue)
(你可以随意调用它,只要你启动它'unwindTo')
然后在界面构建器中创建一个展开转场(直接从按钮等对象或更通用的视图控制器本身)到视图控制器的出口,并选择应该出现在列表中的展开转场。
然后当这个转场被执行时,无论是通过情节提要项目还是在代码中手动执行,您都将返回到定义展开转场的视图控制器。系统会为你完成所有的回溯。
【讨论】:
【参考方案2】:终于在这里找到了另一种选择。
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
)
【讨论】:
【参考方案3】:你应该检查 popToRootViewController 方法。
https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621855-poptorootviewcontroller
【讨论】:
所描述的流程是模态链,而不是推送的视图控制器。 hmm...“我正在推送一个带有 navigationController 的视图控制器。然后向它展示上面的 2 个其他视图控制器” 完全正确。他有一个tabbarcontroller,呈现模态导航视图控制器包含孩子1。推送到孩子2,呈现模态孩子3,呈现模态孩子4 .他想回到tabbarcontroller。 popToRootViewController 没用。 "就像 Tabbar(homeController) -> Child1(push) -> Child 2(presenting) -> child3(presenting )"以上是关于如果您推送并呈现多个视图控制器,如何移动到 parentViewController?的主要内容,如果未能解决你的问题,请参考以下文章
如何在一种情况下推送视图控制器,但在另一种情况下以模态方式呈现它?