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

相關問題