iOS如何随意的穿插跳跃,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- ];

这时候 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- ]; [tempMarr removeObject:self]; //此时 的self 就是指 B ,因为在 B 中呢 [self.navigationController setViewControllers:tempMarr animated:YES]; }

iOS如何随意的穿插跳跃,push来pop去的更多相关文章

  1. iOS 如何随意的穿插跳跃,push来pop去

    OS 如何随意的穿插跳跃,push来pop去 主题思想:如A.B.C.D 四个视图控制器 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A ...

  2. iOS 中push和pop到底系统做了些什么事

    iOS中的push和pop是一个很常用的视图切换方法,他们是成对出现的, 简而言之,push就是压栈,pop就是出栈! [self.navigationController pushViewContr ...

  3. iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解

    (1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...

  4. 【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解

    (1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最以下,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...

  5. 自定义UINavigationController push和pop动画

    http://segmentfault.com/q/1010000000143983 默认的UINavigationController push和pop的默认动画都是左右滑动推出,我的应用要求这种界 ...

  6. UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解

    (1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...

  7. 设计一个Stack,要求Push、Pop、获取最大最小值时间复杂度都为O(1)

    面试的时候,面试官让设计一个栈,要求有Push.Pop和获取最大最小值的操作,并且所有的操作都能够在O(1)的时间复杂度完成. 当时真没啥思路,后来在网上查了一下,恍然大悟,只能恨自己见识短浅.思路不 ...

  8. 【编程题目】栈的 push、pop 序列

    29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整 ...

  9. 24.栈的push和pop序列[StackPushPopSequence]

    [题目] 输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2 ...

随机推荐

  1. Python多线程和Python的锁

    Python多线程 Python中实现多线程有两种方式,一种基于_thread模块(在Python2.x版本中为thread模块,没有下划线)的start_new_thread()函数,另一种基于th ...

  2. Core Java 学习笔记——2.基本数据类型&类型转换

    数据类型(8种基本类型:int/short/long/byte/float/double/char/boolean) 整型 int 4字节 -2 147 483 648~2 147 483 647 s ...

  3. UVALive 4763

    一开始,没敢写,感觉会超时...其实就是暴力搜索.DFS #include<iostream> #include<stdio.h> #include<string.h&g ...

  4. 50道经典的JAVA编程题(汇总)

    这是一次不可思议的编程历程.从2013年的最后一天开始做这份题,中间连续好几天的考试,包括java考试(今天考试的JAVA编程题),直到今天完成了.挺有成就感的...废话不多说了,来电实质性的吧. 全 ...

  5. [Hive - LanguageManual] Import/Export

    LanguageManual ImportExport     Skip to end of metadata   Added by Carl Steinbach, last edited by Le ...

  6. Python字典方法copy()和deepcopy()的区别

    from copy import deepcopy # import deepcopy模块 d = {} d['name'] = ['black', 'guts'] # d = {'name': [' ...

  7. <Araxis Merge>Windows平台下的Merge概览

    它是什么 Merge是一个来自Araxis的可视化文件比较/合并及文件夹同步的应用程序. 用户界面使用英语.德语.日语.法语.国际西班牙语.汉语(繁体和简体)进行本地化了. 优势 对于软件工程师和网站 ...

  8. 如何学习java ee

    来看看Sun给出的J2EE 相关技术主要分为几大块. 1. Web Service技术 -  Java API for XML Processing (JAXP) -  Java API for XM ...

  9. (R)?ex - A simple framework to simplify system administration and datacenter automation

    找工作-互联网招聘求职网-拉勾网 5-10年 (R)?ex - A simple framework to simplify system administration and datacenter ...

  10. homework03

    代码实现真的是大问题……在第二次作业还没有真正实现的情况下只能写这么一篇博客来整理一下从各位大神那里看到的东西. 两个弱菜加起来同样是弱菜,所以我和我的小伙伴的配合就是悲剧的聚合. 首先,大家都说C# ...