迅速。 ViewControllers之间的转换,而不会在返回时解除它们

时间:2015-02-06 16:45:01

标签: ios swift uiviewcontroller uinavigationcontroller

我正在尝试构建一个具有与iTunes相同的导航结构的应用。 enter image description here

当用户点击“正在播放”(第3窗口)按钮时,应打开SecondViewController(假设第2窗口)。当用户返回上一个ViewController时,app应该能够使SecondViewController保持活动状态(音乐在后台播放),以便随时从任何ViewController访问它。

如何使用Navigation或任何其他控制器创建此类层次结构? 希望问题很清楚。

2 个答案:

答案 0 :(得分:3)

您应该将视图控制器视为:管理视图的控制器。您正在将一个功能(播放特定歌曲)绑定到用户界面视图(查看其图片,时间,音量)。

因此,您的层次结构问题不是正确的问题。你应该考虑如何创建一个类(理想情况下是一个单例,称之为CurrentlyPlayingMusic)来管理当前播放的音乐,当用户界面需要显示当前播放的音乐时,它会加载{{1来自您的示例,此时,SecondViewController请求显示所需内容所需的数据和元数据:歌曲名称,艺术家,时间等...

CurrentlyPlayingMusic应该是一个单身人士,一旦实例化,就会留在记忆中并正确播放音乐。任何时候你需要知道发生了什么,或者你需要对当前正在播放的音乐(开始/停止/等...)采取行动,你查询CurrentlyPlayingMusic。从某种意义上说,它是CurrentlyPlayingMusic上的一个轻量级包装器,它还可以让你放入自己想要在音乐生命中持续存在的属性。

答案 1 :(得分:2)

关注@Rikkles的建议。

要专门针对您的问题添加,您应该查看模型 - 视图 - 控制器结构。 http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

关于视图,您需要做的是为您想要的每个视图设置一个UIViewController。然后,当您希望另一个视图出现在顶部时,您将在另一个视图上显示一个UIViewController:

ROOT_VIEW_CONTROLLER.presentViewController(controller, animated: true, completion: {})

并解雇它

ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)

有关UIViewController的完整文档,请查看此处(非常值得一读): https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html