2010-08-23 13 views
1

J'ai un UITableView rempli avec un groupe de lecteurs de musique que j'ai fait en utilisant un UITableViewCell personnalisé. (comme montré dans la capture d'écran liée ici: screenshot). Le problème avec la façon dont je l'ai codé est que puisque chaque cellule est complètement indépendante, il n'y a aucun moyen pour une tableviewcell de vérifier si les autres cellules ont une lecture audio. Cela signifie que lorsque je lance mon application, je peux jouer plus d'un fichier audio en même temps. En fin de compte, comment dois-je mettre en place une sorte de vérification de sorte que lorsque l'utilisateur appuie sur le bouton de lecture, l'application vérifie d'abord si une autre cellule joue de l'audio et, si oui, les arrête avant jouer son propre fichier audio?Comment envoyer des messages entre deux instances d'un UITableViewCell personnalisé?

S'il vous plaît laissez-moi savoir si vous souhaitez que je poste mon projet.

Merci!

Répondre

3

Pour commencer, je ne peux pas penser à une bonne raison pour laquelle les cellules elles-mêmes devraient être responsables de jouer l'audio. Ils devraient être chargés de dire à un autre objet (comme n'importe quel contrôleur est responsable de l'UITableView) de lire l'audio. Ce contrôleur devrait alors savoir arrêter tout ce qu'il jouait déjà avant de jouer quelque chose d'autre.

En général, ce n'est pas une bonne idée de mettre autant de logique dans une «vue».

+0

Même si j'ai posté une réponse, je suis totalement d'accord avec imaginaryboy. –

+1

Je peux seulement faire écho à ceci. Ne mettez pas de logique sans vue dans votre vue. Encapsuler des fonctionnalités comme celles-ci dans les classes de service invoquées par le contrôleur. Le contrôleur est responsable de dire à une vue spécifique de se représenter comme jouant ou ne jouant pas. –

+0

Merci à vous deux pour vos solutions :) Je suis un nouveau développeur et je pense que le plus grand défi en ce moment est la logique, et y penser de cette façon a plus de sens. –

1

Il serait probablement plus facile d'utiliser les notifications (NSNotification et NSNotificationCenter). Utilisez un nom de notification commun pour démarrer et arrêter.

MusicPlayerWillPlay MusicPlayerWillStop

Lorsque vous créez chaque joueur, inscrivez-vous pour les deux notifications. Ensuite, quand playerA va jouer, il envoie une notification MusicPlayerWillPlay. playerB, playerC et playerD, recevront cette notification, et s'ils sont en train de jouer, ils s'arrêteront. L'une des mises en garde est que chaque joueur ne connaît pas les autres, vous devez donc vous inscrire avec un objet nul, ce qui signifie que le joueur recevra sa propre notification. Donc, dans votre méthode de notification, vous aurez probablement envie de faire quelque chose comme

 

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