弹出到初始视图控制器

Posted

技术标签:

【中文标题】弹出到初始视图控制器【英文标题】:Pop to initial view controller 【发布时间】:2014-01-29 22:33:44 【问题描述】:

我目前正在编写一个使用嵌入式导航控制器的应用程序。我需要从嵌入式视图控制器中弹出到第一个视图控制器的初始视图。

这行代码只是将我返回到嵌入式导航控制器的初始视图:

[self.navigationController popToRootViewControllerAnimated:YES];

有什么想法吗?

【问题讨论】:

你能告诉你应用的层次结构以及你想在哪里弹出吗? 如果想通了。我刚刚更换了 [self.navigationController. popToRootViewControllerAnimated:YES]; with [self.navigationController.navigationController popToRootViewControllerAnimated:YES]; navigationController 的 UIViewController 属性返回“视图控制器层次结构中最近的祖先是导航控制器”。看来您有两个导航控制器,一个是另一个的子控制器。 【参考方案1】:

你可以做一些这样的递归函数。将其命名为您喜欢的任何名称或为方便起见将其设为一个类别。

- (void)recursivePop:(UIViewController *)viewController

   if (viewController.navigationController)
   
       [viewController.navigationController popToRootViewControllerAnimated:YES];
       [self recursivePop:viewController.navigationController];
   

然后在视图控制器中你想调用它,像这样调用它。

[self recursivePop:self];

【讨论】:

【参考方案2】:

Swift 版本:

func recursivePop(controller: UIViewController?)

    if let controller = controller 
        if let nav:UINavigationController = controller.navigationController 
            nav.popToRootViewControllerAnimated(true)
            self.recursivePop(controller)
        

    if let split:UISplitViewController = controller.splitViewController 
            if let nav:UINavigationController = split.navigationController 
                nav.popToRootViewControllerAnimated(true)
                self.recursivePop(controller)
            
        
    

【讨论】:

认为这可以通过将 splitcontroller 部分的内部替换为 self.recursivePop(split) 来简化

以上是关于弹出到初始视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

从模态弹出到根视图控制器

从 Popover 关闭或弹出到根视图控制器

如何关闭视图控制器并快速弹出到根视图控制器?

将视图控制器弹出到不存在的视图控制器

从模态视图控制器推送/弹出到另一个视图控制器(包括图片)

弹出到根视图控制器,没有表视图的动画崩溃