Iphone 自定义UITableViewCell中的NSNotification observer?
我正在开发一款类似iPod的应用程序(播放、暂停等)。该应用程序具有tableView,每个单元格中都有曲目名称。我有一个Iphone 自定义UITableViewCell中的NSNotification observer?,iphone,objective-c,ios,uitableview,Iphone,Objective C,Ios,Uitableview,我正在开发一款类似iPod的应用程序(播放、暂停等)。该应用程序具有tableView,每个单元格中都有曲目名称。我有一个MainViewController和一个UITableView自定义的UITableViewCell类。播放器控件存在于MainViewController中 我在每个单元格中都有一个播放/暂停按钮。我已成功设置了NSNotifications,以便在按下单元格中的播放按钮时发布通知,因此曲目信息将发送到MainViewController中的观察者和响应者方法,并启动播放
MainViewController
和一个UITableView
自定义的UITableViewCell
类。播放器控件存在于MainViewController
中
我在每个单元格中都有一个播放/暂停按钮。我已成功设置了NSNotifications
,以便在按下单元格中的播放按钮时发布通知,因此曲目信息将发送到MainViewController
中的观察者和响应者方法,并启动播放器控件(由MPMoviePlayerController
驱动)
这是可行的,但一旦播放曲目,我就不知道如何使手机中的播放/暂停按钮“镜像”iPod控件中播放/暂停按钮的状态。我不认为在每个单元格中添加NSNotification observer
是正确的方法
附加信息:MainViewController
播放器中的播放/暂停按钮图像由一种方法确定,该方法每半秒触发一次,并检查MPMoviePlayerController
的playbackstate
。如果播放,播放按钮将设置播放图像。如果暂停,则设置为暂停图像。我认为,同时设置tableCell播放/暂停按钮的实现将在这里进行
编辑每当播放状态更改时(通过NSNotification),在my UITableViewController中调用此方法。(playButton
是播放器控件中的播放/暂停按钮,而不是我试图根据播放状态更新的表格单元格中的播放/暂停按钮)
苹果开发网站上提供了一个很好的例子来说明你正在尝试做什么 所讨论的项目称为CustomTableViewCell。该项目使用计时器定期更新单元格,从您的描述中可以看出,您正在做类似的事情 当单元格的状态更改时,请执行以下操作
NSArray *visibleCells = self.tableView.visibleCells;
for (CustomCell *cell in visibleCells) {
[cell redisplay];
}
这将位于自定义表视图单元格中
- (void)redisplay {
[customCellView setNeedsDisplay];
}
当您的状态更改时,请使用
[tableView reloadData]
,并在cellForRowAtIndexPath:
中提供一个单元格时,根据数据的状态设置按钮(即该单元格所指的歌曲是否正在播放)
另外,您可以使用通常的方法委派,而不是通知。但通知也很有效,特别是当您需要多个观察者时。我不完全理解您的解决方案。通过使用
setNeedsDisplay
,我是否需要在自定义单元格中使用drawRect
方法?我在问题中添加了一些代码。对于您的解决方案,我将在哪里更改单元格播放/暂停按钮图像?@mnort我假设您的解决方案中确实有一个使用drawRect的自定义单元格。您是如何分配单元格的?我的问题有点不同,但您的“NSArray*visibleCells=self.tableView.visibleCells;”适合我。多谢各位+1每次播放状态更改时调用reloadData
会很昂贵吗?reloadData
仅为可见单元格重新加载数据。因此,这种方法是有效的。
- (void)redisplay {
[customCellView setNeedsDisplay];
}