2012-09-10 45 views
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進行過兩次調用,因爲在這個委託方法中沒有發件人。任何幫助?

回答

2

表視圖表示一些內容(音頻),因此它是有意義的,你有一個模型(對象)在每個表視圖單元格後面。

對於每一個細胞,你可以用2個或多個屬性創建一個對象:
- audiofile的:文件路徑
- 正在播放:布爾值

當下的音頻文件開始播放(按下按鈕)將布爾值「正在播放」設置爲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個音頻文件在任何時間播放,那麼像我上面描述的那種實現將會很好地工作。