Как вы отправляете сообщения между двумя экземплярами пользовательского UITableViewCell? - PullRequest
1 голос
/ 24 августа 2010

У меня есть UITableView, заполненный кучей музыкальных проигрывателей, которые я сделал с помощью пользовательского UITableViewCell.(как показано на скриншоте, связанном здесь: снимок экрана ).

Проблема с тем, как я это закодировал, состоит в том, что, поскольку каждая ячейка полностью независима, нет возможности проверить одну ячейку таблицы.если есть другие, в других ячейках воспроизводится звук.Это означает, что когда я запускаю свое приложение, я могу одновременно воспроизводить более одного аудиофайла.

В конечном итоге, как бы я поставил какую-то проверку на место, чтобы, когда пользователь нажимал кнопку воспроизведения, приложение сначала проверяло, воспроизводит ли какая-либо другая ячейка звук, и, если так, останавливаетсяих перед воспроизведением собственного аудио файла?

Пожалуйста, дайте мне знать, если вы хотите, чтобы я опубликовал свой проект.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Для начала я не могу придумать какой-либо веской причины, по которой сами клетки должны отвечать за воспроизведение звука. Они должны отвечать за указание другому объекту (например, любому контроллеру, который отвечает за UITableView) воспроизводить аудио. Этот контроллер, очевидно, будет знать, чтобы остановить то, что он уже играл, прежде чем играть что-то еще.

В общем, не очень хорошая идея помещать столько логики в «представление».

1 голос
/ 24 августа 2010

Вероятно, проще всего использовать уведомления (NSNotification и NSNotificationCenter).

Использовать общее имя уведомления для запуска и остановки.

MusicPlayerWillPlay MusicPlayerWillStop

При созданииКаждый игрок, зарегистрируйтесь для обоих уведомлений.Затем, когда игрок А собирается играть, он отправляет уведомление MusicPlayerWillPlay.playerB, playerC и playerD получат это уведомление, и, если они играют, остановятся.

Одно предостережение: каждый игрок не знает о других, поэтому вы должны зарегистрироваться с нулевым объектом, что означаетplayerA получит свое собственное уведомление.Так что в вашем методе уведомлений вы, вероятно, захотите сделать что-то вроде


{
    //...
    if (sender == self)
        return;
    //...
}

...