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];

}

Demo下载地址

时间: 2024-07-31 06:22:27

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

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

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 中按顺

IOS 提交审核,遇到Missing Push Notification Entitlement 问题。

貌似不影响提交........还是有人提交成了. 昨天晚上提交软件审核,遇到了Missing Push Notification Entitlement 的问题. 问题起因:这个版本我添加了PUSH推送功能,然后上传软件后,就提示Missing Push Notification Entitlement. 解决办法:我重新生成了一下Distribution 的provisioning 证书,然后重新提交了一下就OK了. 问题原因:我以前上传了一个版本,没有PUSH功能,第二个版本添加PUSH后,

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

(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界面,也就是用户看到的界面. (2)我们需要把导航控制器加载到APP中,需要把这个导航控制器设置为window的根视图控制器(都是控制器类,可以赋值),这样就相当于加载到了window里. (3)我们要在栈中新增或者删除一个视图控制器,就需要得到导航控制器,一般在栈中得所有视图控制器都有一个self.

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

(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最以下,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界面,也就是用户看到的界面. (2)我们须要把导航控制器载入到APP中,须要把这个导航控制器设置为window的根视图控制器(都是控制器类,能够赋值),这样就相当于载入到了window里. (3)我们要在栈中新增或者删除一个视图控制器,就须要得到导航控制器,一般在栈中得全部视图控制器都有一个self.

自定义UINavigationController push和pop动画

http://segmentfault.com/q/1010000000143983 默认的UINavigationController push和pop的默认动画都是左右滑动推出,我的应用要求这种界面切换的动画效果复杂一点,大概有这么几个: 更快的左右推出,默认是0.3秒,我需要快一倍 带抖动的左右推出 水平翻转 纸张翻页效果 但是这些切换都要放在NavigationController里做管理,怎么实现,求个思路 ios 链接 评论 更多 默认排序时间排序 3 个回答 答案对人有帮助,有参考

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型

import java.util.Stack; /**  * 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.  * @author user  *  *思路:队列是先入先出,栈是先入后出,可以将数据压入第一个栈后,在弹出来压入第二个栈,弹得时候直接从第二个栈弹出,弹出后又将  *第二个栈中的所有数据弹出重新压入的一个栈  */ public class Solution {     Stack<Integer> stack1 = new Stack<

011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值. push,pop和min函数的时间复杂度都为O(1). 看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否? 如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值. 可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办. 既然只用一个变量没法解决这个问题,那我们就增加变量.如果说每个结点除了保存当前的 值, 另外再保存一个从该结点到栈底的

汇编指令:push、pop

8086CPU出栈入栈都是以字为单位进行的. push ax 由一下两步完成 1.SP=SP-2 2.将ax中的内容送入SS:SP指向的内存单元 pop ax 1.将SS:SP指向的内存单元中的内容送入ax 2.SP=SP+2 push 寄存器 pop 寄存器 push 段寄存器 pop 段寄存器 push 内存单元 pop 内存单元 只给出内存单元的偏移地址,段地址在指令执行时从ds中获得. 汇编指令:push.pop,布布扣,bubuko.com

push() 和 pop()

数组 push() 方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度.而 pop() 方法则从数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项.如下: var colors = []; //创建一个数组 var count = colors.push("red", "green"); //推入两项 alert(count); //2 count = colors.push("blue"); //推入