【问题标题】:Swift. Transition between ViewControllers without dismissing them on going back迅速。 ViewController 之间的转换而不在返回时关闭它们
【发布时间】:2015-02-06 16:45:00
【问题描述】:

我正在尝试构建一个与 iTunes 具有相同导航结构的应用程序。

当用户单击“正在播放”(第三个窗口)按钮时,应打开 SecondViewController(假定为第二个窗口)。当用户回到之前的 ViewController 时,应用应该能够保持 SecondViewController 处于活动状态(音乐在后台播放),以便随时从任何 ViewController 访问它。

如何使用导航或任何其他控制器创建这样的层次结构? 希望问题很清楚。

【问题讨论】:

    标签: ios swift uiviewcontroller uinavigationcontroller


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-22
        • 2019-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多