迅速。 ViewController 之间的转换而不在返回时关闭它们
Posted
技术标签:
【中文标题】迅速。 ViewController 之间的转换而不在返回时关闭它们【英文标题】:Swift. Transition between ViewControllers without dismissing them on going back 【发布时间】:2015-02-06 16:45:00 【问题描述】:我正在尝试构建一个与 iTunes 具有相同导航结构的应用程序。
当用户单击“正在播放”(第三个窗口)按钮时,应打开 SecondViewController(假定为第二个窗口)。当用户回到之前的 ViewController 时,应用应该能够保持 SecondViewController 处于活动状态(音乐在后台播放),以便随时从任何 ViewController 访问它。
如何使用导航或任何其他控制器创建这样的层次结构? 希望问题很清楚。
【问题讨论】:
【参考方案1】:您应该将视图控制器视为:管理视图的控制器。您正在将功能(播放特定歌曲)绑定到用户界面视图(查看其图片、时间、音量)。
因此,您的层次结构问题不是要问的正确问题。相反,您应该考虑如何创建一个管理当前播放的音乐的类(最好是单例,称为 CurrentlyPlayingMusic
),当用户界面需要显示当前播放的音乐时,它会从您的例如,此时,从CurrentlyPlayingMusic
请求显示所需的数据和元数据:歌曲名称、艺术家、时间等...
CurrentlyPlayingMusic
应该是一个单例,一旦实例化,它就会驻留在内存中并正确播放音乐。任何时候您需要知道发生了什么,或者您需要对当前播放的音乐(开始/停止/等等)采取行动,您可以查询CurrentlyPlayingMusic
。从某种意义上说,它是对AVAudioPlayer
的轻量级包装,还可以让您放入您希望在该音乐的整个生命周期中保留的自己的属性。
【讨论】:
【参考方案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
【讨论】:
以上是关于迅速。 ViewController 之间的转换而不在返回时关闭它们的主要内容,如果未能解决你的问题,请参考以下文章
从不同 ViewController 中的函数捕获 var |迅速
我有一个带有不同/多个 UIView 的情节提要,并且我想要每个 UIView 都有一个 ViewController。迅速
如果从不同的视图控制器按下返回,则重新加载而不重新加载。迅速