2013-03-08 75 views

回答

2
for (UIViewController*vc in [self.navigationController viewControllers]) { 
if ([vc isKindOfClass: [TestViewController class]]){ 

[[self navigationController] popToViewController:vc animated:YES]; 
    } 
} 
0
NSInteger index = -1; 
NSArray* arr = [[NSArray alloc] initWithArray:self.navigationController.viewControllers]; 
NSLog(@"View list=== %@",arr); 
for(int i=0 ; i<[arr count] ; i++) 
{ 
     if([[arr objectAtIndex:i] isKindOfClass:NSClassFromString(@"ViewContollerName")]) 
     { 
      index = i; 
     }   
} 
[self.navigationController popToViewController:[arr objectAtIndex:index] animated:YES]; 
-1

試試這個:

UIViewController *currentView = [[UIViewController alloc] init]; 
currentView = [navigationController.visibleViewController retain]; 
if (![currentView isMemberOfClass:[YourViewController class]]) 
{ 
    //push 
} 

else 
{ 
    //pop 
} 
[currentView release]; 

注:調整如果您正在使用ARC。

確保您引用正確的navigationController

+0

只有在問題中的vc位於導航堆棧頂部時,這纔會起作用。另外,第一行不僅沒有用處,而且在非ARC項目中也存在內存泄漏。 – Tobi 2013-03-08 10:40:05

+0

@Tobi,是的,我做了這個假設。你能解釋爲什麼第一行是內存泄漏嗎? – avenger 2013-03-08 11:45:47

+0

您正在分配一個'UIViewController'並在第一行的'currentView'中保存一個指向它的指針。在第二行中,您將覆蓋所述指針,因此您將失去對第一行中分配的「UIViewController」的引用,因此根本無法釋放它。 – Tobi 2013-03-08 21:57:01

0

你可以簡單地檢查你要推或流行的視圖 - 控制的navigationController propterty。如果vc在導航堆棧上,則設置此屬性,如果不是,則爲nil。這樣可以避免迭代堆棧中的所有vcs,並進行醜陋的類測試。

說你要知道,如果theVC是導航控制器堆棧上,你可能只是這樣做:

if (theVC.navigationController == nil) 
    //push the vc on the nav stack 
else 
    //pop the vc from the nav stack 
1

如果類的「視圖控制器」相同的情況下,可以在navigationController發生,這將更好地工作

-(void)gotoViewController:(id)viewController 
{ 
    if ([self.navigationController.viewControllers containsObject:viewController]) 
    { 
     [self.navigationController popToViewController:viewController animated:YES]; 
    } 
    else 
    { 
     [self.navigationController pushViewController:viewController animated:YES]; 
    } 
} 
0

我會建議更好地維護一個數組。您只需要維護導航控制器的關鍵字,這是如何添加對象其邏輯不切合實際,所以相應地瞭解它

檢索時檢查數組中是否存在對象,如果是彈出它。並且當它從堆棧中移除時,其他人推它

+0

資源開放/免費時,版主有什麼錯誤,您可以如何阻止我的帳戶。這裏的主持人就像大笨蛋,沒有大腦,或者即使他們有我猜它的隱藏屬性設置爲TRUE。 – 2013-04-03 10:53:47

相關問題