0

我有一个播放按钮,按下它会播放声音,然后将图像更改为暂停按钮。该按钮是我的单元格的属性,位于我的表格视图中。当用户点击按钮时,我可以访问单元格,因为我可以这样做:

UIButton *b = (UIButton *)sender;
myTableViewCell* cell =  (myTableViewCell*)[[b superview] superview];

然后我可以说

[cell.button setImage:myImage];

但是一旦声音结束,我想将按钮的图像改回播放按钮。我知道委托方法

-(void)audioPlayerDidFinishPlaying:
(AVAudioPlayer *)player successfully:(BOOL)flag 
{
    NSLog(@"audioPlayerDone");
}

完成后我确实得到了 NSLog,但是我如何访问单元格并更改图像?我没有像以前那样两次调用 superview 的奢侈,因为在这个委托方法中没有发送者。有什么帮助吗??

4

1 回答 1

2

表格视图代表一些内容(音频),因此在每个表格视图单元格后面都有一个模型(对象)是有意义的。

对于每个单元格,您可以创建一个具有 2 个或更多属性的对象:
- 音频文件:文件路径
- 正在播放:布尔值

在音频文件开始播放(按下按钮)的那一刻,您将布尔值“正在播放”设置为 true,并更新表格视图,以便在按钮上显示不同的图像。要确定需要更改哪个对象的状态,请使用方法-indexPathForCell:. 对于您的按钮按下方法,代码将类似于以下内容:

UIButton *b = (UIButton *)sender;
myTableViewCell* cell =  (myTableViewCell*)[[b superview] superview];

NSIndexPath *indexPath = [tableView indexPathForCell:cell];
AudioObject *audio = [dataArray objectAtIndex:indexPath.row];
audio.isPlaying = true;

[tableView reloadData];

音频文件停止播放的那一刻,您可以使用模型检查数组以查找正在播放的任何文件并将其设置为 false。之后,您再次更新表格视图,以便按钮图像变回默认图像。

如果任何时候只有一个音频文件正在播放,那么像我上面描述的那样的实现将可以正常工作。

于 2012-09-10T00:53:37.107 回答