如何在自定义UITableViewCell的两个实例之间发送消息?

时间:2010-08-23 22:28:40

标签: iphone uitableview avaudioplayer

我有一个UITableView,其中填充了一堆我使用自定义UITableViewCell制作的音乐播放器。 (如此处链接的屏幕截图所示:screenshot)。

我编码方式的问题在于,由于每个单元格完全独立,因此一个tableviewcell无法检查其他单元格是否有其他单元格进行音频播放。这意味着当我运行我的应用程序时,我可以同时播放多个音频文件。

最终,我将如何进行某种检查,以便当用户点击播放按钮时,应用程序首先检查是否有其他单元格正在播放音频,如果是,则在播放前停止播放自己的音频文件?

如果您希望我发布我的项目,请告诉我。

谢谢!

2 个答案:

答案 0 :(得分:3)

对于初学者来说,我无法想出细胞本身应该负责播放音频的任何理由。他们应该负责告诉其他一些对象(比如负责UITableView的控制器)播放音频。那个控制器显然会知道在玩别的东西之前就停止它已经播放的任何内容。

一般来说,将这么多逻辑放入“视图”中并不是一个好主意。

答案 1 :(得分:1)

使用通知可能最简单(NSNotification和NSNotificationCenter)。

使用通用通知名称启动和停止。

MusicPlayerWillPlay MusicPlayerWillStop

创建每个播放器时,请注册两个通知。然后当playerA打算播放时,它会发布MusicPlayerWillPlay通知。 playerB,playerC和playerD将收到此通知,如果他们正在播放,则会停止。

有一点需要注意的是,每个玩家都不知道其他玩家,所以你必须注册一个零对象,这意味着玩家将获得自己的通知。因此,在您的通知方法中,您可能希望执行类似

的操作

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