【问题标题】: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 属性返回“视图控制器层次结构中最近的祖先是导航控制器”。看来您有两个导航控制器,一个是另一个的子控制器。

标签: ios iphone objective-c uinavigationcontroller popviewcontrolleranimated


【解决方案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) 来简化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多