iOS 如何随意的穿插跳跃,push来pop去
OS 如何随意的穿插跳跃,push来pop去
主题思想:如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 =[NSMutableArrayarrayWithArray:self.navigationController.viewControllers];
此时再加入C 就容易多了,咦,聪明的你会发现从 D pop C 不能直接将 C直接 addObject;
当然,我会这样做:
[tempMarr insertObject:C atIndex:tempMarr.count- 2];
这时候 tempMarr
是这样的 [A,B,C,D], 可是 要想 从 C pop 到 A ,数组中就不能有 B
就需要 将tempMarr
变成 [A,C,D] ,至于怎么变,你比我懂得多,
懂得思考的同学会发现 这时的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 =[NSMutableArrayarrayWithArray:self.navigationController.viewControllers]; [tempMarr insertObject:C atIndex:tempMarr.count- 2]; [tempMarr removeObject:self]; //此时 的self 就是指 B ,因为在 B 中呢 [self.navigationController setViewControllers:tempMarr animated:YES]; }
iOS 如何随意的穿插跳跃,push来pop去的更多相关文章
- iOS如何随意的穿插跳跃,push来pop去
iOS如何随意的穿插跳跃,push来pop去? 主题思想:如A.B.C.D 四个视图控制器. 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop ...
- iOS 中push和pop到底系统做了些什么事
iOS中的push和pop是一个很常用的视图切换方法,他们是成对出现的, 简而言之,push就是压栈,pop就是出栈! [self.navigationController pushViewContr ...
- iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...
- 【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解
(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最以下,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...
- 自定义UINavigationController push和pop动画
http://segmentfault.com/q/1010000000143983 默认的UINavigationController push和pop的默认动画都是左右滑动推出,我的应用要求这种界 ...
- UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...
- 设计一个Stack,要求Push、Pop、获取最大最小值时间复杂度都为O(1)
面试的时候,面试官让设计一个栈,要求有Push.Pop和获取最大最小值的操作,并且所有的操作都能够在O(1)的时间复杂度完成. 当时真没啥思路,后来在网上查了一下,恍然大悟,只能恨自己见识短浅.思路不 ...
- 【编程题目】栈的 push、pop 序列
29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整 ...
- 24.栈的push和pop序列[StackPushPopSequence]
[题目] 输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2 ...
随机推荐
- Spring注解用法
1. Controller层:@Controller @Controller @RequestMapping("/user")//请求localhost:8080/user/*** ...
- javascript操作写入txt文件及消息: Automation 服务器不能创建对象问题
简单的写入txt代码: function WriteTxt() { var fso, tf; fso = new ActiveXObject("Scripting.Fil ...
- TFS Services 集成Docker
随着Docker的爆发,越来越多软件研发团体开始享用和受益于Docker系统体系带来的巨大好处.Docker的使用,除了减少软硬件成本的立竿见影效果,更是对软件生命周期过程开发.测试.生成部署和运维整 ...
- ClassLoader的等级加载机制
摘自深入分析java web技术内幕
- mysql数据库 触发器简单实例
触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...
- 开箱即用 - Memcache
废话少说,先上代码C# memcache Demo memcache 是服务器缓存系统,以键值对方式保存数据到内存中,把对象序列化后,理论上可支持所有的数据类型. 使用情景:怎么用都可以,注意的是它只 ...
- TCP报文中的SYN,FIN,ACK,PSH,RST,URG
TCP的三次握手是怎么进行的:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发 ...
- 快速上手微信小程序-快递100
2007 年 1 月 9 日,乔布斯在旧金山莫斯科尼会展中心发布了首款 iPhone,而在十年后的 1 月 9 日,微信小程序正式上线.张小龙以这样的形式,向乔布斯致敬. 小程序在哪里? 小程序功能模 ...
- Date类型常用概念及方法总结(1)
Date类型使用UTC(国际协调时间)1970年1月1日零时开始经过的毫秒数来保存时间. (1)创建当前日期 调用Date不传递参数的情况下,创建的新对象自动获得当前日期和时间 ...
- 第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据
第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据 学习要点: 1.JSON语法 2.解析和序列化 前两章我们探讨了XML的结构化数据,但开发人员还是觉得这 ...