iphone - 自定义 UITableViewCell 中的 NSNotification 观察者?

标签 iphone objective-c ios uitableview

我正在构建一个具有类似 iPod 控件(播放、暂停等)的应用程序。该应用程序有 tableView,每个单元格中都有轨道名称。我有一个带有 UITableView 和自定义 UITableViewCell 类的 MainViewController。播放器控件存在于 MainViewController 中。

我在每个单元格中还有一个播放/暂停按钮。我已成功设置 NSNotifications 以在单元格中按下播放按钮时发布通知,因此轨道信息将发送到 MainViewController 中的观察者和响应者方法,并且播放器控件(由 MPMoviePlayerController 驱动)已启动。

这行得通,但是一旦播放轨道,我就无法弄清楚如何使单元格中的播放/暂停按钮“镜像”我的 iPod 控件中播放/暂停按钮的状态。我不认为在每个单元格中添加一个 NSNotification observer 是正确的做法。

附加信息:MainViewController 播放器中的播放/暂停按钮图像由每半秒触发一次并检查 MPMoviePlayerController 的playbackstate 的方法确定。如果正在播放,则播放器按钮设置为播放图像。如果暂停,则设置为暂停图像。我认为设置 tableCell 播放/暂停按钮的实现也将放在此处。

编辑 在我的 UITableViewController 中,只要播放状态发生变化(通过 NSNotification),就会调用此方法。 (playButton 是播放器控件中的播放/暂停按钮,而不是我尝试根据播放状态更新的表格单元格中的播放/暂停按钮)。

- (void) updateViewForPlayerState
{
// Change playButton image depending on playback state
[playButton setImage:((moviePlayer.playbackState == MPMoviePlaybackStatePlaying) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal];

}

最佳答案

Apple 开发网站上提供了一个很好的示例,说明您正在尝试做什么。

TableViewSuite

有问题的项目称为 CustomTableViewCell。该项目使用 Timer 定期更新单元格,根据您的描述,这听起来像是您在做类似的事情。

当单元格的状态发生变化时,执行以下操作。

  1. 更新单元格的状态。我假设这反射(reflect)在 plabackstate
  2. 调用[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/

相关文章:

iphone - CoreData 实体和属性之间的关系

c# - objective-c 是否具有类似于 c# 的泛型类型(和约束)?

php - IOS app无法显示汉字

iphone - NSArray containsObject 方法

ios - 从 iOS7 中的应用程序中关闭所有 UIAlertview

ios - 在推送到详细导航时设置 UISplitViewController 的 preferredDisplayMode

ios - 我在创建一个单例吗?

iphone - iPhone 上的线性代数(python/numpy?)

iphone - 为什么 Apple 建议以编程方式创建模态导航 Controller ?

iphone - 当单元格滚出 View 时,TableViewCell 的 textLabel 值返回到 1