首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >清除Swift中的导航堆栈

清除Swift中的导航堆栈
EN

Stack Overflow用户
提问于 2015-08-26 04:54:22
回答 3查看 16.9K关注 0票数 8

我目前正在设计一个具有漏斗流和仪表板流的应用程序。我希望在完成时从内存中清除漏斗流:

因此,如果1)如果新用户开始漏斗-> 2)漏斗屏幕1-5 -> 3)漏斗完整屏幕

我想转换到仪表板屏幕,它还不在堆栈上(在这种情况下,它不是我的头控制器)。当我转换到仪表板时,我如何从内存中清除上面的6个屏幕-基本上是设置一个新的导航根并清除其余部分?展开段似乎无法设置新的根目标。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-26 14:06:26

所以我最终不得不以编程的方式完成它,弹回第一个控制器,然后从漏斗头部替换到仪表板头部:

代码语言:javascript
运行
复制
func bookingCompleteAcknowledged(){
    //remove the popup controller
    dismissViewControllerAnimated(true, completion: nil)
    //remove current controller
    dismissViewControllerAnimated(true, completion: nil)

    if let topController = UIApplication.sharedApplication().keyWindow?.rootViewController {

        if let navcontroller = topController.childViewControllers[0] as? UINavigationController{
          navcontroller.popToRootViewControllerAnimated(false)

            if let funnelcontroller = navcontroller.childViewControllers[0] as? FunnelController {
                funnelcontroller.removeFromParentViewController();
                funnelcontroller.view.removeFromSuperview();

                let revealController = self.storyboard?.instantiateViewControllerWithIdentifier("DashboardController") as! SWRevealViewController

                navcontroller.addChildViewController(revealController)
                navcontroller.view.addSubview(revealController.view)
            }
        }
    }

}
票数 3
EN

Stack Overflow用户

发布于 2016-01-28 16:51:16

如果您只想清除导航堆栈,并在其上推送一个新视图,那么还有一个更简单的解决方案。

假设您已经(以编程方式)分配了一个导航控制器,例如,在一个viewDidLoad()函数中,如下所示:

代码语言:javascript
运行
复制
let navController = UINavigationController( rootViewController: YourRootController )
view.addSubview( navController.view )
addChildViewController( navController )

navController.didMoveToParentViewController( self )

YourRootController充当堆栈的根(堆栈的底部)。

要将其他控制器推送到堆栈顶部(您的漏斗控制器),只需使用navController.pushViewController( yourControllerInstance!, animated: false )即可。

如果您想在漏斗完成后清除堆栈,只需调用:

代码语言:javascript
运行
复制
navController.popToRootViewControllerAnimated( false )

此函数从堆栈中删除所有视图(根控制器除外)。

票数 10
EN

Stack Overflow用户

发布于 2015-08-26 05:01:17

我相信您可以通过向UINavigationController的viewControllers属性分配一个新的数组(在您的示例中,仅包含仪表板视图)来完成此操作。

为什么要使用相同的导航控制器,而不是制作一个新的?通常,我建议您只创建一个新的导航控制器,而不是尝试更改导航控制器的根。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32213874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档