【问题标题】:Make UIViewController a singleton?让 UIViewController 成为单例?
【发布时间】:2019-01-10 23:37:57
【问题描述】:

在使用我的应用程序期间,用户应该能够启动、停止、转发背景音乐。 (跨越几个 UIViewControllers)。为此,我将我的 MusicPlayer 设置为单例 (NSObject)。如果我在每个视图中为它自己创建控件,它就可以工作,但我想要的基本上是一个视图,它处理音乐播放器类并且一直存在。用户还应该能够通过向左或向右滑动来“隐藏”和“显示”视图。因此,如果它被隐藏并且我更改了我的视图控制器,它也应该隐藏在新的视图控制器中,并且音乐不应该被中断。

我在我的主视图控制器中尝试了这个,它可以工作:

UIView * playerView = [[UIView alloc] initWithFrame:CGRectMake(0, 300, self.view.bounds.size.width, 44)];
playerView.backgroundColor = [UIColor redColor];

[[[[UIApplication sharedApplication] delegate] window] addSubview:playerView];

有没有办法在 ApplicationDelegate 中做到这一点?

【问题讨论】:

    标签: ios iphone xcode singleton audio-player


    【解决方案1】:

    如果你的单例 MusicPlayer 正在播放音乐,那么当视图改变时它不应该被打断。而不是为每个视图控制器创建音乐控件,您可以将音乐控件视图添加为窗口的子视图,并确保它位于其他所有内容之上。

    更新: 在您的应用程序委托中,您通常有一些代码来设置主视图(即 applicationDidFinishLaunching 方法)。我假设您有一个主要的导航或选项卡控制器,您可以在其中执行其他所有操作。因此,在将其视图添加到窗口后,创建并添加您的音乐播放器控制器视图并将其添加为窗口的子视图。只要您不向窗口添加其他视图,它就会一直保持在顶部(如果添加了,您只需将音乐控件移回顶部)。

    我会使用拥有音乐播放器控件视图的单例 MusicPlayerController 视图控制器。这样,其他视图控制器可以轻松地显示或隐藏控件。

    【讨论】:

    • 音乐不会被打断。这部分有效!考虑到答案的第二部分,您能否编辑您的答案并更详细地说明?到目前为止谢谢!
    • 我怎样才能让视图保持在其他一切之上?它不可见吗?问题已更新。
    • 谢谢,听起来不错。但是如何将视图添加到单例类或创建单例 ViewController?
    • Google "iphone singleton class" - 你应该找到你需要的所有信息:-)
    【解决方案2】:

    如果您使用容器视图控制器(例如 UINavigationController),那么您可以让所有视图控制器在彼此之间切换,并且您可以在容器顶部添加 MusicPlayer 控件(最简单的方法是让它具有相同的parent 作为导航控制器),这样它只创建一次,它不依赖于它下面显示的视图。

    【讨论】:

      【解决方案3】:

      你不能:How to add button to UINavigationController

      “在 UIViewController 上而不是在 UINavigationController 上添加 UIbarButtonItem。导航控制器显示顶部 viewVontroller 的导航项,而不是自身。”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-07
        • 2014-06-03
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多