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を取得しますが、セルにアクセスして画像を変更するにはどうすればよいですか?このデリゲートメソッドには送信者がいないため、以前のようにスーパービューを2回呼び出す余裕はありません。何か助けは?

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 に設定できます。その後、テーブル ビューを再度更新して、ボタン イメージをデフォルトのイメージに戻します。

上で説明したような実装は、常に 1 つのオーディオ ファイルしか再生されていない場合でも問題なく動作します。

于 2012-09-10T00:53:37.107 に答える