请教一个类似网易云音乐 iOS 版 界面跳转问题

2016-10-12 11:07:27 +08:00
 maitiantuzi

例如点击页面 a 的一首歌曲,跳转到播放页面 b ,然后在播放页面 b 跳转到歌手页面 c ,在歌手页面 c 点击一首歌曲播放,此时跳转到播放页面 d 。 我的问题是在页面 d ,点击返回到页面 c ,再点击返回时如何像网易云音乐一样直接跳过播放页面 b ,会到页面 a 。

示意图: a->b->c->d 点击返回: d->c->a

2534 次点击
所在节点    问与答
28 条回复
kera0a
2016-10-12 11:46:54 +08:00
跳转到页面 a
此时 viewControllers 数组中 [a]
...
跳转到 c 数组中 [a,b,c]

跳转到 d 不用 push 方法,
将当前 Nav 中的 viewControllers 数组 [a,b,c]取出,删除掉 b,添加一个 d ,
得到数组 [a,c,d]
使用 setViewControllers 方法,传递一个这个数组即可。

之后返回就是 d->c->a
loveuqian
2016-10-12 12:09:33 +08:00
看楼上回复
貌似是位大神
rayshen
2016-10-12 18:02:52 +08:00
说这么多不知道你问什么。。。。
1L 就更是不知所云。。。
pop 函数本身支持 pop 到任意一个 controller ,建议看看官方文档
isweal
2016-10-12 20:37:46 +08:00
@rayshen 如果要支持从 c 滑动返回 a 的话。。。
finab
2016-10-13 10:47:15 +08:00
@rayshen 你不懂, 1 楼才是正确答案
rayshen
2016-10-13 11:09:26 +08:00
@finab 不就是在 pop 前把前面一个 controller delete 掉吗,你不会觉得很高端吧
rayshen
2016-10-13 11:09:43 +08:00
@finab push 前
rayshen
2016-10-13 11:11:38 +08:00
@finab 官方既然有提供现成的 pop API ,直接去用比较好
rayshen
2016-10-13 11:14:59 +08:00
@isweal 官方的返回手势和栈顺序相关,如果要支持手势返回,那就需要清理栈了,至于在什么时候清理,其实都是可以的,
哪怕是已经 push 到 d 了,还是可以把 b 给删掉
finab
2016-10-13 11:35:39 +08:00
@rayshen 1 楼都给出最简单实现的,调整页面栈,使用 setViewControllers 代替 Push 。
这里不是用 pop 能解决的,这里的主要问题就是把某个页面从栈中删除,和 pop 方法没关系,
Pop 不能删除某个页面的堆栈,能删除的只有 setViewControllers 用一个新的 Array 。
Nav 的 ViewControllers 数组是个 不可修改的 NSArray ,如果不使用 setViewControllers 跳转,那么之后调整,还是得有一次 setViewControllers 做调整 ,而且你也很难找到合适的机会去调整。

再结合你 4 楼的言论,就知道你不懂,我这样说有错?
finab
2016-10-13 11:38:21 +08:00
@rayshen 如果你想继续讨论,请直接上代码吧,你只用 pop 去实现网易云音乐那种效果,否则就到此为止,别浪费大家宝贵的时间
rayshen
2016-10-13 11:51:05 +08:00
@finab pop 方法本身就是删除堆栈,怎么叫 pop 不能删除堆栈? pop 到某个特定的界面就是删除堆栈中的多个 controller 。 setViewController ,只是一个很普通的函数,我不知道你说的“很难找到合适的机会”是指什么?
4L 提出的 C 滑动返回 A 又是另外一个需求,如果你逻辑还清楚的话,就知道并不能混为一谈。
假如 C 有需求返回支持多个界面,直接返回到 B ,点击某个返回首页到 A ,而你早已经把 B 删了,那你是不是就懵逼了?
rayshen
2016-10-13 11:54:18 +08:00
@finab 问题太简单,也没必要讨论。做开发时,只有适合的场景,没有唯一的技术。
finab
2016-10-13 12:07:35 +08:00
@rayshen
楼主的需求就是 C 滑动返回到 A ,网易云音乐那个效果也是这样,用 pop 不能实现。
1 楼就给出这个需求的直接解决方案。
你却说 1 楼是错的,提出用 POP 。
我说了你说错了, pop 不能解决楼主的需求。

不要扯有的没的的东西,你提出的新需求 是两个按钮,按钮当然随便能点,但是返回只有一个操作
既然简单,直接上代码呗,用 pop 做出这个效果
finab
2016-10-13 12:08:43 +08:00
@rayshen 不想再听你说了,不知所云。
直接上代码,瞎比比有啥用
rayshen
2016-10-13 12:22:48 +08:00
@finab popToViewController(),一句函数完美解决 C 到 A 的问题,你瞎逼逼扯那么多有的没的,不就是为了强调要提前删 b ?谁说一定要删 b 了?楼主提到的内容,需求仅仅是要实现的是网易云音乐的“点击返回” C 到 A ,何必把问题复杂化搞得人家不知所云。
rayshen
2016-10-13 12:24:57 +08:00
@finab 另外我可没说 1L 错,你可别诬陷我。
rayshen
2016-10-13 12:26:28 +08:00
@finab 到此为止吧,我知道你为了钻网易云音乐这个牛角尖煞费苦心,我劝你还是别浪费宝贵时间了
finab
2016-10-13 12:28:03 +08:00
@rayshen 你的意思是用户只有点击后退 才能正确回到 A ,而滑动返回就随便咯? 你们公司做事就是这么随意的吗?
点后退返回到 A ,滑动返回却回到了 B ?
这算 BUG 吗?
而且网易云音乐播放页面是个单例 , D 其实就是 B 。

一点脑子都没有~
rayshen
2016-10-13 12:34:37 +08:00
@finab 是啊,我的公司做事是随意啊,起码在全中国还算比较随意的。。哈哈。。
至于网易云音乐,我都说了你就别钻这个牛角尖了。

谁说点击返回和滑动一定要一致的哈哈?返回按钮可以代表的是返回到首页,滑动返回是到前一个界面。

你们公司是不是都是只做技术,不懂产品的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312143

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX