2015-04-04 103 views
1

我想以編程方式在UINavigationController堆棧中刪除某些特定類型的控制器。一般刪除導航堆棧內的自定義UIViewController類

工作的非通用功用:

if let navigationController = navigationController { 
     var controllers = [AnyObject]() 
     for item in navigationController.viewControllers { 
      if !(item is CustomViewController) { 
       controllers.append(item) 
      } 
     } 

     navigationController.viewControllers = controllers 
    } 

不過,我試圖讓這個成爲通用的。

func removeController<T>(controller: T.Type, navigationController: UINavigationController?) { 
    if let navigationController = navigationController { 
     var controllerArray = [AnyObject]() 
     for item in navigationController.viewControllers { 
      if !(item is T.Type) { 
       controllerArray.append(item) 
      } 
     } 
     navigationController.viewControllers = controllerArray 
    } 

} 
removeController(CustomViewController.self, navigationController) 

經過多次嘗試後,仍無法正常工作。
任何人都可以幫助我,謝謝。

回答

1

試試下面的代碼:

func removeController<T>(type: T.Type, navigationController: UINavigationController?) { 

    if let navigationController = navigationController { 
     var controllerArray = [UIViewController]() 

     for item in navigationController.viewControllers as [UIViewController] { 
      if !(item is T) { 
       controllerArray.append(item) 
      } 
     } 
     navigationController.viewControllers = controllerArray 
    } 
} 

removeController(CustomViewController.self, navController) 
+0

這是行不通的。它刪除'navigationController'中的所有'UIViewController'棧 – 2015-04-04 04:50:26

+0

已更改的代碼。我在Playground上測試它似乎工作。 – Abdullah 2015-04-04 05:46:52