我正在尝试构建一个具有与iTunes相同的导航结构的应用。
当用户点击“正在播放”(第3窗口)按钮时,应打开SecondViewController(假设第2窗口)。当用户返回上一个ViewController时,app应该能够使SecondViewController保持活动状态(音乐在后台播放),以便随时从任何ViewController访问它。
如何使用Navigation或任何其他控制器创建此类层次结构? 希望问题很清楚。
答案 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