2014-03-26 194 views
2

刪除視圖控制器我的代碼做到這一點:從導航堆棧

NSArray *viewControllersFromStack = [self.navigationController viewControllers]; 
NSMutableArray *viewControllersFromStackMutable = [NSMutableArray arrayWithArray:viewControllersFromStack]; 
NSMutableArray *viewControllersToRemove = [[NSMutableArray alloc]init]; 

for (UIViewController *currentVC in viewControllersFromStack) 
{ 
    if ([currentVC isKindOfClass:[TalksViewController class]]) 
    { 
     [viewControllersToRemove addObject:currentVC]; 
     if (viewControllersToRemove.count == 2) 
     { 
      UIViewController *oneVCtoRemove = [viewControllersToRemove objectAtIndex:0]; 
      [viewControllersFromStackMutable removeObject:oneVCtoRemove]; 
      [self.navigationController setViewControllers:viewControllersFromStackMutable]; 

     } 
    } 
} 

問題是,我在導航項目引用刪除VC的。如何解決它?

回答

1

當要刪除從導航堆棧視圖,你可以只是簡單地調用導航欄上的此方法從棧中彈出的觀點:

[self.navigationController popViewControllerAnimated:YES]; 

要彈的外形圖使用

for(UIViewController *currentVC in viewControllersFromStack) 
{ 
    if([currentVC isKindOfClass:[TalksViewController class]]) 
    { 
     [currentVC.navigationController popViewControllerAnimated:YES]; 
    } 
} 
+0

沒有,我需要 – user3461902

+0

然後,我不完全理解這個問題,如果你能給只是更詳細一點? – Gergy008

+0

我解決了這個問題,謝謝 – user3461902

0

上述答案是正確的。

我有'A'作爲rootview控制器。 'B到F'是其他視圖控制器。從「F」開始,如果我想直接轉到「A」,那就像下面一樣。

[self.navigationController popToRootViewControllerAnimated:YES]; 

但是如果我想跳到'B',那麼答案中的代碼是有幫助的。我只更改了視圖控制器的數組,以便使用'reverseObjectEnumerator'運行反轉,而使用'popViewControllerAnimated:NO'將動畫生成爲NO。它的代碼下

NSArray *viewControllersFromStack = [self.navigationController viewControllers]; 
for(UIViewController *currentVC in [viewControllersFromStack reverseObjectEnumerator]) 
{ 
    if(![currentVC isKindOfClass:[A class]] && ![currentVC isKindOfClass:[B class]]) 
    { 
     [currentVC.navigationController popViewControllerAnimated:NO]; 
    } 
}