我正在使用类似iPod的控件(播放,暂停等)构建应用程序。该应用程序的tableView在每个单元格中都有轨道名称。我有MainViewController
UITableView
和自定义UITableViewCell
类。播放器控件存在于MainViewController
。
我还在每个单元格中都有一个播放/暂停按钮。我已成功设置NSNotifications
以在单元格中按下播放按钮时发布通知,因此轨道信息将发送给MainViewController
中的观察者和响应者方法以及播放器控件(由MPMoviePlayerController
)已启动。
这很有效,但是一旦播放了曲目,我就无法弄清楚如何让单元格中的播放/暂停按钮“镜像”我的iPod控制中播放/暂停按钮的状态。我不认为在每个单元格中添加NSNotification observer
是正确的方法。
附加信息:MainViewController
播放器中的播放/暂停按钮图像由每半秒触发一次的方法确定,并检查playbackstate
的{{1}}。如果正在播放,则播放器按钮设置为播放图像。如果暂停,则设置为暂停图像。我正在考虑实现也设置tableCell播放/暂停按钮将在这里。
编辑只要在我的UITableViewController中播放状态发生变化(通过NSNotification),就会调用此方法。 (MPMoviePlayerController
是播放器控件中的播放/暂停按钮,而不是我正在尝试根据播放状态更新的表格单元格中的播放/暂停。)
playButton
答案 0 :(得分:1)
苹果开发网站上提供了您尝试做的一个很好的例子。
有问题的项目名为CustomTableViewCell。这个项目使用一个Timer来定期更新单元格,从你的描述中你可以听到你正在做类似的事情。
当细胞状态发生变化时,请执行以下操作。
这应该强制自定义单元格使用您设置的新状态重绘自己。
这将在计时器回调方法
中的表视图控制器中NSArray *visibleCells = self.tableView.visibleCells;
for (CustomCell *cell in visibleCells) {
[cell redisplay];
}
这将在您的自定义表格视图单元格
中- (void)redisplay {
[customCellView setNeedsDisplay];
}
答案 1 :(得分:0)
当状态发生变化时使用[tableView reloadData]
并在cellForRowAtIndexPath:
中提供单元格时根据数据状态设置按钮(即单元格所指的歌曲是否正在播放)。< / p>
也可以使用委托,而不是通知,这是通常的方法。但是,如果您需要多个观察员,通知也会起作用。