例如点击页面 a 的一首歌曲,跳转到播放页面 b ,然后在播放页面 b 跳转到歌手页面 c ,在歌手页面 c 点击一首歌曲播放,此时跳转到播放页面 d 。 我的问题是在页面 d ,点击返回到页面 c ,再点击返回时如何像网易云音乐一样直接跳过播放页面 b ,会到页面 a 。
示意图: a->b->c->d 点击返回: d->c->a
1
kera0a 2016-10-12 11:46:54 +08:00 1
跳转到页面 a
此时 viewControllers 数组中 [a] ... 跳转到 c 数组中 [a,b,c] 跳转到 d 不用 push 方法, 将当前 Nav 中的 viewControllers 数组 [a,b,c]取出,删除掉 b,添加一个 d , 得到数组 [a,c,d] 使用 setViewControllers 方法,传递一个这个数组即可。 之后返回就是 d->c->a |
2
loveuqian 2016-10-12 12:09:33 +08:00 via iPhone
看楼上回复
貌似是位大神 |
3
rayshen 2016-10-12 18:02:52 +08:00 1
说这么多不知道你问什么。。。。
1L 就更是不知所云。。。 pop 函数本身支持 pop 到任意一个 controller ,建议看看官方文档 |
9
rayshen 2016-10-13 11:14:59 +08:00
@isweal 官方的返回手势和栈顺序相关,如果要支持手势返回,那就需要清理栈了,至于在什么时候清理,其实都是可以的,
哪怕是已经 push 到 d 了,还是可以把 b 给删掉 |
10
finab 2016-10-13 11:35:39 +08:00 1
@rayshen 1 楼都给出最简单实现的,调整页面栈,使用 setViewControllers 代替 Push 。
这里不是用 pop 能解决的,这里的主要问题就是把某个页面从栈中删除,和 pop 方法没关系, Pop 不能删除某个页面的堆栈,能删除的只有 setViewControllers 用一个新的 Array 。 Nav 的 ViewControllers 数组是个 不可修改的 NSArray ,如果不使用 setViewControllers 跳转,那么之后调整,还是得有一次 setViewControllers 做调整 ,而且你也很难找到合适的机会去调整。 再结合你 4 楼的言论,就知道你不懂,我这样说有错? |
11
finab 2016-10-13 11:38:21 +08:00
@rayshen 如果你想继续讨论,请直接上代码吧,你只用 pop 去实现网易云音乐那种效果,否则就到此为止,别浪费大家宝贵的时间
|
12
rayshen 2016-10-13 11:51:05 +08:00
@finab pop 方法本身就是删除堆栈,怎么叫 pop 不能删除堆栈? pop 到某个特定的界面就是删除堆栈中的多个 controller 。 setViewController ,只是一个很普通的函数,我不知道你说的“很难找到合适的机会”是指什么?
4L 提出的 C 滑动返回 A 又是另外一个需求,如果你逻辑还清楚的话,就知道并不能混为一谈。 假如 C 有需求返回支持多个界面,直接返回到 B ,点击某个返回首页到 A ,而你早已经把 B 删了,那你是不是就懵逼了? |
14
finab 2016-10-13 12:07:35 +08:00
@rayshen
楼主的需求就是 C 滑动返回到 A ,网易云音乐那个效果也是这样,用 pop 不能实现。 1 楼就给出这个需求的直接解决方案。 你却说 1 楼是错的,提出用 POP 。 我说了你说错了, pop 不能解决楼主的需求。 不要扯有的没的的东西,你提出的新需求 是两个按钮,按钮当然随便能点,但是返回只有一个操作 既然简单,直接上代码呗,用 pop 做出这个效果 |
16
rayshen 2016-10-13 12:22:48 +08:00
@finab popToViewController(),一句函数完美解决 C 到 A 的问题,你瞎逼逼扯那么多有的没的,不就是为了强调要提前删 b ?谁说一定要删 b 了?楼主提到的内容,需求仅仅是要实现的是网易云音乐的“点击返回” C 到 A ,何必把问题复杂化搞得人家不知所云。
|
19
finab 2016-10-13 12:28:03 +08:00
@rayshen 你的意思是用户只有点击后退 才能正确回到 A ,而滑动返回就随便咯? 你们公司做事就是这么随意的吗?
点后退返回到 A ,滑动返回却回到了 B ? 这算 BUG 吗? 而且网易云音乐播放页面是个单例 , D 其实就是 B 。 一点脑子都没有~ |
20
rayshen 2016-10-13 12:34:37 +08:00
@finab 是啊,我的公司做事是随意啊,起码在全中国还算比较随意的。。哈哈。。
至于网易云音乐,我都说了你就别钻这个牛角尖了。 谁说点击返回和滑动一定要一致的哈哈?返回按钮可以代表的是返回到首页,滑动返回是到前一个界面。 你们公司是不是都是只做技术,不懂产品的? |
26
jackisnotspirate 2016-10-13 13:10:17 +08:00
那这种逻辑也挺奇怪的吧。
|
27
wohenyingyu01 2016-10-13 15:08:25 +08:00
界面 b 和界面 c 用 insertSubView 的方式进行切换,而不是 push ,界面 d 再用 push 进来就行了吧?不知道我的理解对不对。
|
28
maitiantuzi OP 谢谢大家回复,本人发现网易云音乐 iOS 版和 android 版实现机制并不一样,其它 app 类似的逻辑也各有不同。
我的解决方案是参考国外一个 app ,当点击歌曲播放时, present 出播放页面的 controller ,在播放页面点击歌手页面时, dismiss 掉这个页面,然后 present 出下一个页面,完美避免了页面管理的问题。 |