在平常的开发中可能会遇到一些不太平常的需求,比方说我的就是从首页A控制器 push到C控制器,然后需要从C返回B,然后B再返回的话可以返回首页A
乍一看这需求好像不太符合常理,但是有些场景下还是比较合理的,就比方我这个
直接上代码吧
// 这是 UINavigationController 中的属性
@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers; // The current view controller stack.
// 首先导航控制器其实是一个压栈和出栈的过程,在 A push 到 C 后 viewControllers 数组中只有 A 和 C,想要 pop 到 B 的话 viewControllers 中必须要有 B 才行;
// 既然这样我们直接把 B 添加到数组中试一试吧
// viewControllers 是一个不可变数组
NSMutableArray *temp = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
viewControllerB *VCB = [[viewControllerB alloc] init];
[temp insertObject: VCB atIndex: temp - 1];
// 此时 temp 数组中存在 A -->B -->C 三个控制器,在 C 中直接 pop 即可
[self.navigationController setViewControllers: temp animated:YES];
[self.navigationController popViewControllerAnimated:YES];
网友评论