2017-03-16 47 views
2

我有兩個視圖控制器。按下按鈕以使用下面的代碼,我已從一個視圖導航到另一個視圖。如何檢查視圖控制器是否被添加到堆棧中

*let secondViewController = self.storyboard!.instantiateViewControllerWithIdentifier("NotificationController") as! NotificationController 

self.navigationController!.pushViewController(secondViewController, animated: true)* 

對於後面,我使用欄按鈕上的酒吧按鈕點擊後退使用下面的代碼。

self.navigationController?.popViewControllerAnimated(true) 

所以我的問題是,如果我從一個視圖到另一個視圖不斷地添加到堆棧中。我只想顯示另一個視圖,當它已經添加到堆棧停止添加它時,它只會增加一次。

+0

HTTP://計算器。com/a/42523549/5461400試試這個 –

回答

1

這裏是檢查它的代碼。

if let viewControllers = navigationController?.viewControllers { 
    for viewController in viewControllers { 
     // some process 
     if viewController.isKindOfClass(ViewControllerClassName) { 
      println("yes it is") 
     } 
    } 
} 
+0

如何在添加堆棧時刪除堆棧 –

+0

vc.removeFromParentViewController-使用此方法 –

+0

您也可以使用self.navigationController?.viewControllers.removeAtIndex(vcIndex),如果您知道索引號碼 –

0

可以用下面code

目的檢查 - Visual C

NSArray * controllers = [self.navigationController viewControllers]; 

    for (int i = 0; i < [controllers count]; i++){ 

     UIViewController * controllerTest = [controllers objectAtIndex:i]; 

     if([controllerTest isKindOfClass:[YourController class]]){ 
      NSLog(@"Class is available"); 
     } 

    } 

夫特3.0

if let viewControllers = self.navigationController?.viewControllers { 
      for viewController in viewControllers { 
       // some process 
       if viewController.isKindOfClass(YourController) { 
        print("Class is available") 
       } 
      } 
     } 
+0

如何刪除類可用或只顯示不添加堆棧 –

6

要檢查導航堆棧是否包含特定類型的view controller,你可以使用:

if let viewControllers = self.navigationController?.viewControllers 
{ 
    if viewControllers.contains(where: { 
     return $0 is YourViewController 
    }) 
    { 
     //Write your code here 
    } 
} 

從導航堆棧中刪除一個特定的控制器,您需要更改導航堆棧。

例子:

if var viewControllers = self.navigationController?.viewControllers 
    { 
     for controller in viewControllers 
     { 
      if controller is UIViewController 
      { 
       viewControllers.removeElement(controller) 
       self.navigationController?.viewControllers = viewControllers 
      } 
     } 
    } 
1

在這裏,我們走了。

此行會給你UIViewControllers

self.navigationController?.viewControllers

的陣列現在你要做的就是檢查你的viewControllerObject不存在或不是?

通過編寫此行

if viewController.isKindOfClass(YourController){ 
} 

,這裏是一個完整的代碼。

if let viewControllers = self.navigationController?.viewControllers { 
      for viewController in viewControllers { 

       if viewController.isKindOfClass(YourController) { 
        print("Your controller exist") 
       } 
     } 
} 

當你在回到你的'ViewControllerA'的時候寫下面的行,它會從導航棧中刪除一個ViewControllerB。

self.navigationController?.popViewControllerAnimated(true) 

這只是類似的彈出操作,我們正在使用堆棧和navigationcontroller是一個堆棧。

讓我知道你是否有任何困惑。

0

對於迅速4

if let viewControllers = self.navigationController?.viewControllers { 
     for vc in viewControllers { 
      if vc.isKind(of: YourViewController.classForCoder())){ 
       print("It is in stack") 
       //Your Process 
      } 
     } 
} 
相關問題