push,pop到任意控制器(一)
来源:互联网 发布:塔西陀陷阱 知乎 编辑:程序博客网 时间:2024/06/16 18:03
主题思想:如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地话会很影响性能,该方法可以简单快捷的避免该问题。
- push,pop到任意控制器(一)
- iOS 随意push,pop到任意控制器
- 导航控制器push/pop
- pop 到任意层
- ios导航控制器UINavigationController,控制器a跳转(push)到b后,b跳转(push)到c,但c后退(pop)进入a
- 导航控制器的制作,push,pop,root,index
- 自定义控制器的转场动画(Push、Pop)
- 自定义控制器的转场动画(Push、Pop)
- 控制器转场动画自定义(1):push/pop的实现
- 使用CATransaction实现push pop控制器结束的回调
- pop到指定的控制器;pop到上层控制器;返回上上一级控制器
- present,dismiss到任意控制器
- A、B、C、D 四个视图控制器想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A
- Pop到之前的任意界面
- pop跳转到指定的控制器
- pop到没有入栈的控制器
- swift pop 到指定的控制器
- PUSH/POP
- RTMP协议
- 【LINUX命令】chkconfig命令
- MySql的CONCAT和GROUP_CONCAT函数
- android--外部启动activity,自定义action,action常量大全
- C++设计模式——中介者模式
- push,pop到任意控制器(一)
- troublehub网站网址
- 定一个属于我自己的"小目标"
- ffmpeg使用一:录屏保存为yuv420p
- 如何彻底修改Eclipse中项目名称
- Java Map浅谈(jdk1.7)
- Linux根据关键字批量杀进程
- [Android设计模式]Android退出应用程序终极方法
- 玩转Android之手摸手教你DIY一个抢红包神器!