使UIViewController单身?

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

什么是最好的方法来做到这一点?

谢谢

编辑:

那么…我在我的家庭视图控制器中试过这一个,它的工作原理:

 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中做到这一点?

如果您的单曲MusicPlayer正在播放音乐,则视图更改时不应中断。 而不是为每个视图控制器创build音乐控件,您可以添加音乐控制视图作为窗口的子视图,并确保它保持在其他任何东西之上。

更新:在你的应用程序委托中,你通常有一些代码来设置主视图(即applicationDidFinishLaunching方法)。 我假设你有一个主要的导航或选项卡控制器,其中你做的一切。 因此,在将视图添加到窗口后,创build并添加音乐播放器控制器视图并将其添加为窗口的子视图。 只要您不添加其他视图到窗口(如果您这样做,您只需要将音乐控件移回顶部)就可以保持最佳状态。

我将使用一个拥有音乐播放器控件视图的单体MusicPlayerController视图控制器。 这样,其他视图控制器可以很容易地显示或隐藏控件。

如果你使用容器视图控制器(例如UINavigationController),那么你就可以让所有的视图控制器在彼此之间切换,并且在容器的顶部你可以添加你的MusicPlayer控件(最简单的方法是将它与父对象导航控制器),这样它只创build一次,它不依赖于它下面显示的视图。

你不能: 如何添加button到UINavigationController

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