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
 中按顺序含有 [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];

}

 

 

转载于:https://www.cnblogs.com/fengmin/p/5848040.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值