Сделать UIViewController синглтоном? - PullRequest
6 голосов
/ 23 марта 2012

Во время использования моего приложения пользователь должен иметь возможность запускать, останавливать, пересылать фоновую музыку. (Через несколько 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?

Ответы [ 3 ]

6 голосов
/ 23 марта 2012

Если ваш синглтон MusicPlayer воспроизводит музыку, его не следует прерывать при изменении вида. И вместо создания элементов управления музыкой для каждого контроллера представления вы можете добавить представление элементов управления музыкой в ​​качестве подпредставления окна и убедиться, что оно остается поверх всего остального.

Обновление: В делегате приложения у вас обычно есть некоторый код для настройки основного представления (то есть метод applicationDidFinishLaunching). Я предполагаю, что у вас есть основной контроллер навигации или вкладки, в котором вы делаете все остальное. Поэтому после добавления его представления в окно создайте и добавьте представление контроллера музыкального проигрывателя и добавьте его в качестве подпредставления окна. Он останется сверху до тех пор, пока вы не добавите другие виды в окно (если вы это сделаете, вам просто нужно переместить элементы управления музыкой обратно вверх).

Я бы использовал одноэлементный контроллер представления MusicPlayerController, которому принадлежит представление управления музыкальным проигрывателем. Таким образом, другие контроллеры вида могут легко показывать или скрывать элементы управления.

0 голосов
/ 05 марта 2014

Вы не можете: Как добавить кнопку в UINavigationController

"Добавьте UIbarButtonItem в UIViewController, а не в UINavigationController. Контроллер навигации отображает элемент навигации верхнего viewVontroller, а не себя."

0 голосов
/ 23 марта 2012

Если вы используете контроллер представления контейнера (например, UINavigationController), тогда все контроллеры представления переключаются между собой, и поверх контейнера вы можете добавить свои элементы управления MusicPlayer (проще всего было бы иметь тот же parent как контроллер навигации), поэтому он создается только один раз и не зависит от того, какие представления отображаются под ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...