我正在构建一个具有类似 iPod 控件(播放、暂停等)的应用程序。该应用程序有 tableView,每个单元格中都有轨道名称。我有一个带有 UITableView
和自定义 UITableViewCell
类的 MainViewController
。播放器控件存在于 MainViewController
中。
我在每个单元格中还有一个播放/暂停按钮。我已成功设置 NSNotifications
以在单元格中按下播放按钮时发布通知,因此轨道信息将发送到 MainViewController
中的观察者和响应者方法,并且播放器控件(由 MPMoviePlayerController
驱动)已启动。
这行得通,但是一旦播放轨道,我就无法弄清楚如何使单元格中的播放/暂停按钮“镜像”我的 iPod 控件中播放/暂停按钮的状态。我不认为在每个单元格中添加一个 NSNotification observer
是正确的做法。
附加信息:MainViewController
播放器中的播放/暂停按钮图像由每半秒触发一次并检查 MPMoviePlayerController 的
。如果正在播放,则播放器按钮设置为播放图像。如果暂停,则设置为暂停图像。我认为设置 tableCell 播放/暂停按钮的实现也将放在此处。 playbackstate
的方法确定
编辑 在我的 UITableViewController 中,只要播放状态发生变化(通过 NSNotification),就会调用此方法。 (playButton
是播放器控件中的播放/暂停按钮,而不是我尝试根据播放状态更新的表格单元格中的播放/暂停按钮)。
- (void) updateViewForPlayerState
{
// Change playButton image depending on playback state
[playButton setImage:((moviePlayer.playbackState == MPMoviePlaybackStatePlaying) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal];
}
最佳答案
Apple 开发网站上提供了一个很好的示例,说明您正在尝试做什么。
有问题的项目称为 CustomTableViewCell。该项目使用 Timer 定期更新单元格,根据您的描述,这听起来像是您在做类似的事情。
当单元格的状态发生变化时,执行以下操作。
- 更新单元格的状态。我假设这反射(reflect)在 plabackstate
- 调用[cell setNeedsDisplay]
这应该会强制自定义单元格以您设置的新状态重新绘制自身。
这将在您的 TableView Controller 中的计时器回调方法中
NSArray *visibleCells = self.tableView.visibleCells;
for (CustomCell *cell in visibleCells) {
[cell redisplay];
}
这将在您的自定义表格 View 单元格中
- (void)redisplay {
[customCellView setNeedsDisplay];
}
关于iphone - 自定义 UITableViewCell 中的 NSNotification 观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055963/