push,pop到任意控制器
2016-10-28 14:36
141 查看
主题思想:如A、B、C、D 四个视图控制器
想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,再从 C pop 的A解决方法如下:
1.假如此时在 A 控制器下,想要到 push 到 B, 可以这样写[self.navigationController pushViewController: B :YES];这时
self.navigationController.viewControllers中按顺序含有 [A,B]2.此时已经到 B 控制器下了, 接下来是 push 到 D, 可以这样写[self.navigationController pushViewController: D :YES];
这时
self.navigationController.viewControllers中按顺序含有 [A,B,D]接下来很重要,很重要,很重要:如何想从 D pop 到 C, 看数组[A,B,D] 中压根就没有C 该如何pop 到C呢?这时就需要对这个数组进行修改,将C 加入进去于是 你会如下写:[self.navigationController.viewControllers addObject:C];
发现报错,这是因为
self.navigationController.viewControllers是不可变数组,没办法了,我们只好转换一下了:NSMutableArray*tempMarr =[NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[tempMarr insertObject:C atIndex:tempMarr.count- 2];
这时候
tempMarr是这样的 [A,B,C,D], 可是 要想 从 C pop 到 A ,数组中就不能有 B就需要 将
tempMarr变成 [A,C,D] :[tempMarr removeObjectAtIndex:2];但是你会发现,这时的
self.navigationController.viewControllers依然是 [A,B,D], 不用急,不用怕。
navigationController有这样一个方法, 可以搞定,如下:[self.navigationController setViewControllers:tempMarr animated:YES];
你可能会说,这不是直接把 B 替换 成 C 吗看上去是这样,可是跳转的时机,时机,时机重要的事情说三遍,还有视图的切换,切换,切换此时还在 B 控制器中,这些处理过程都是在 B 中处理的 , 也必须是 B 执行了 push 到 D 方法后,也就是说[self.navigationController pushViewController:D animated:YES];之后 进行的 数组处理;
附加代码:
在B 控制器中处理:-(void)pushTest {[self.navigationController pushViewController:D animated:YES];
NSMutableArray*tempMarr =[NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[tempMarr insertObject:C atIndex:tempMarr.count- 2];
[tempMarr removeObject:self]; //此时 的self 就是指 B ,因为在 B 中呢
[self.navigationController setViewControllers:tempMarr animated:YES];
}
适用场景:适合在如商品的详情页面上有商品的推荐,点击商品推荐仍是商品详情页面,如果不断push地话会很影响性能,该方法可以简单快捷的避免该问题。
相关文章推荐
- iOS 随意push,pop到任意控制器
- IOS开发—IOS自定义任意位置右滑POP视图控制器
- 导航控制器生产,push,pop,root,index
- iOS 导航控制器如何随意push和pop 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A
- A、B、C、D 四个视图控制器想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 自定义控制器的转场动画(Push、Pop)
- iOS中用在导航控制器的转场动画(pop,push动画)制作
- ios导航控制器UINavigationController,控制器a跳转(push)到b后,b跳转(push)到c,但c后退(pop)进入a
- 导航控制器的制作,push,pop,root,index
- iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
- iOS开发UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解
- 【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解
- 使用CATransaction实现push pop控制器结束的回调
- iOS控制器在push或者pop时导航栏出现黑块的解决办法
- 自定义控制器的转场动画(Push、Pop)
- iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- iOS7新特性 ViewController转场切换(二) 系统视图控制器容器的切换动画---push pop present dismis
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。