自定义UITableViewCell中的NSNotification观察者?

时间:2012-06-15 18:05:51

标签: iphone objective-c ios uitableview

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

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

这很有效,但是一旦播放了曲目,我就无法弄清楚如何让单元格中的播放/暂停按钮“镜像”我的iPod控制中播放/暂停按钮的状态。我不认为在每个单元格中添加NSNotification observer是正确的方法。

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

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

playButton

2 个答案:

答案 0 :(得分:1)

苹果开发网站上提供了您尝试做的一个很好的例子。

TableViewSuite

有问题的项目名为CustomTableViewCell。这个项目使用一个Timer来定期更新单元格,从你的描述中你可以听到你正在做类似的事情。

当细胞状态发生变化时,请执行以下操作。

  1. 更新单元格的状态。我假设这反映在plabackstate
  2. 调用[cell setNeedsDisplay]
  3. 这应该强制自定义单元格使用您设置的新状态重绘自己。

    这将在计时器回调方法

    中的表视图控制器中
    NSArray *visibleCells = self.tableView.visibleCells;
        for (CustomCell *cell in visibleCells) {
            [cell redisplay];
    }
    

    这将在您的自定义表格视图单元格

    - (void)redisplay {
        [customCellView setNeedsDisplay];
    }
    

答案 1 :(得分:0)

当状态发生变化时使用[tableView reloadData]并在cellForRowAtIndexPath:中提供单元格时根据数据状态设置按钮(即单元格所指的歌曲是否正在播放)。< / p>

也可以使用委托,而不是通知,这是通常的方法。但是,如果您需要多个观察员,通知也会起作用。