有的时候一个控制器做为过渡使用,用过之后 push 到下一个页面则不再使用此控制器,如 A -> B -> C, B 是过渡使用的,push 到 C 后即需要将 B 移除出导航栈,以达到可以从 C 直接返回到 A 的目的,其实现依赖 UINavigatioinController 的 setViewControllers: 属性,其实现和使用如下:
/// 使用分类实现,将自身移除出导航栈
@implementation UIViewController (RemoveFromNavigationStack)
- (void)br_removeFromNavigationControllerStack {
NSMutableArray *newArray = [self.navigationController.viewControllers mutableCopy];
[newArray removeObject:self];
[self.navigationController setViewControllers:newArray animated:YES];
}
@end
/// B 控制器的实际调用场景
- (void)clickToPushToControllerC:(id)sender {
ControllerC *vc = [[ControllerC alloc] init];
[self.navigationController pushToViewController:vc animated:YES];
[self br_removeFromNavigationControllerStack];
}