【问题标题】:dismiss launched viewControllers and return to initial view controller (storyboards)关闭已启动的视图控制器并返回初始视图控制器(故事板)
【发布时间】:2012-06-02 05:33:45
【问题描述】:

我已经多次看到这个问题,但从未真正回答过。我想知道在使用情节提要时是否有一种可接受/干净的方式来关闭所有已启动的视图控制器并返回到初始视图控制器(例如从生成的视图控制器中的操作)。

我知道如何使用委托,但是,我不希望我的初始视图控制器为每个可能生成的视图控制器实现委托。相反,我想要一个主页按钮,它可以清理所有内容并从应用程序的任何位置返回初始视图控制器。

想法?

编辑:为了清楚起见,假设我没有使用 UINavigation 控制器。

EDIT2:是否可以像使用 appDelegate 一样从应用程序中的任何位置访问“初始视图控制器”的方法?

【问题讨论】:

    标签: ios ipad ios5 storyboard


    【解决方案1】:

    这应该在任何时候都这样做。只需将其粘贴在 IBAction 中并将其连接到按钮即可:)

    [self.navigationController popToRootViewController];
    

    【讨论】:

    • 这不只是针对 UINavigation 控制器吗?我并不总是使用这些。
    • 如果您一直在使用故事板 segues 进行推送,我相信它应该可以正常工作,因为它正在为您创建一个。
    • 我认为不会——在没有底层 UINavigation 控制器的情况下会导致崩溃。我只是以模态方式呈现视图控制器(或者,偶尔以编程方式进行)。
    • 如果您正在展示模态链,那么您的应用程序中的底层设计问题会更糟糕,然后需要弹出到根视图控制器。
    • @RyanPoolos:“模态链”是唯一会导致不严格受导航控制器控制的模式吗?例如,如果您有一个带有两个选项卡的 TabBarController,每个选项卡都有一个导航控制器怎么办?您可以在每个选项卡的导航控制器中单独展开,但这并不能完全“重新开始”应用程序的流程。那里有什么合适的?
    【解决方案2】:

    我最终使用了单例。似乎工作得很好。

    在初始视图控制器的初始加载时,我将视图控制器设置为单例的属性。然后,我可以在应用程序中的任何视图控制器上的任何操作方法中执行以下代码,以关闭所有视图控制器并返回到初始视图控制器。

    initialViewControllerManager *ivcManager = [initialViewControllerManager sharedInstance];
    LPViewController *ivc = ivcManager.initalViewController;    
    [ivc dismissModalViewControllerAnimated:YES];
    

    可能不是“正确”的答案,但似乎有效。而且,考虑到我的场景的复杂性,完全依赖 UINavigationControllers 会非常复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多