2015-04-04 100 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