目前有这样一个需求,不如有一个认证流程,每个微信导航行控制器流程如下:
A -> B ->C ->D ,其中B和C是一个认证流程,走完这个流程,点击D的返回,直接回到A上。
即在navigationController的栈,删除B和C 。
OC语言的实现方式:
NSMutableArray *marr = [[NSMutableArray alloc]initWithArray:self.navigationController.viewControllers];
for (UIViewController *vc in marr) {
if ([vc isKindOfClass:[theVCYouWantToRemove class]]) {
[marr removeObject:vc];
break;
}
}
self.navigationController.viewControllers = marr;
记得break;否则会出一些小问题 。
若用self removeFromParentViewController
这个方法,但是会出现小得问题就放弃使用了。
返回后当前的导航栏没变,会是返回前的控制器的导航栏
Swfit的实现方式:
// 1.先Push到新的控制器,在删除当前控制器
//2. 导航栏剔除当前控制器
let arrayVC = NSMutableArray.init(array: (self.navigationController?.viewControllers)!)
for vc in arrayVC {
if (vc as! UIViewController).classForCoder == 当前控制器.self {
arrayVC.remove(vc)
break;
}
}
self.navigationController?.viewControllers = arrayVC as! [UIViewController];
上面的方法实现两次就可以删除B 和C 控制器,然后D返回后就到了A上
参考网址:http://blog.csdn.net/it_male/article/details/49931989