2

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

这行代码只是返回我到嵌入式navigationController的初始视图:

[self.navigationController popToRootViewControllerAnimated:YES];

任何想法?

+1

你能告诉应用程序,你的等级和你在哪里要弹出? – KudoCC

+0

如果算出来。我刚刚更换了 [self.navigationController。 popToRootViewControllerAnimated:YES]; 与 [self.navigationController.navigationController popToRootViewControllerAnimated:YES]; – user3250926

+0

UIViewController的navigationController属性返回“作为导航控制器的视图控制器层次结构中最近的祖先”。看来你有两个导航控制器,一个是另一个的子控制器。 – KudoCC

回答

5

你可以做一些这样的递归函数。为了方便起见,请将其命名为任何类别或将其作为类别。

- (void)recursivePop:(UIViewController *)viewController 
{ 
    if (viewController.navigationController) 
    { 
     [viewController.navigationController popToRootViewControllerAnimated:YES]; 
     [self recursivePop:viewController.navigationController]; 
    } 
} 

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

[self recursivePop:self]; 
0

斯威夫特版本:

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) 
      } 
     } 
    } 
} 
+1

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

相关问题