2014-04-18 42 views
0

我正在使用故事板和故事板ID,我是幾個控制器在導航堆棧深處。iOS,應該如何備份導航堆棧,但不是root?

  • 菜單控制器
  • 選擇控制器
  • 項目控制器
  • 結果控制器

我目前在「結果控制器」,我想進入「項目控制器」,但重置/重新加載該控制器,我會傳入它當前具有的相同屬性值。所以實際上我會上升到兩個級別然後推動。

我只是想知道什麼是最好的方式來實現這一目標?

我想我可以調用彈出幾次,然後在我的'結果控制器'內傳遞屬性值到'項目控制器'?

嗯,我想我會保持動畫的第一個流行然後禁用它的兩個推動。

希望這是有道理的。

+1

您可以使用[self.navigationController popViewControllerAnimated:YES]; – user2071152

+0

只需彈出到ItemViewcontroller並使用委託或代碼塊傳遞數據。 – Leena

+0

@Jules你是否找到了你的答案,然後在這裏發佈它會幫助其他人 –

回答

1
for (UIViewController *controller in [self.navigationController viewControllers]) 
     { 
      if ([controller isKindOfClass:[YourViewCOntrollerName class]]) 
      { 
       [self.navigationController popToViewController:controller animated:YES]; 

       break; 
      } 
     } 
+0

很酷,有了這個我也可以'MyVC * this =(MyVC *)controller'並設置屬性:) – Jules

0

彈出特定視圖控制器(在這種情況下ItemController),可以使用下面的代碼

[self.navigationController popToViewController:ItemController animated:YES]; 
0

你試圖讓它不是真正的最佳方式,並最終可能會導致您的問題。乾淨的方法是編寫一個方法來重置「Item Controller」,所以你只需要做1次彈出。

2

試試這個。也許它會幫助你。

NSArray *vList = [[self navigationController] viewControllers]; 
    UIViewController *view; 
    for (int i=[vList count]-1; i>=0; --i) { 
     view = [vList objectAtIndex:i]; 
     if ([view.nibName isEqualToString: @"ItemController"]) 
     { 
      [self.navigationController popToViewController:view animated:YES]; 
      break; 
     } 
    } 
1

試試這個

[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:2] animated:YES]; 

你可以在任何索引回去你想