2013-11-24 34 views
3

我有一個UITableView與幾個單元格,每個單元格都有一個按鈕,它會觸發在子類別單元格中創建的AVAudioPlayer。每個單元代表一個人,並在按鈕上點擊他們的音頻文件被播放。防止AVAudioPlayers同時播放

現在,當我點擊第一行時,它就像它應該玩。但是當我點擊第二排(而第一排仍在播放)時,它顯然會同時播放它們。如果正在播放,我想停止第一行。

我試圖在我的視圖控制器中創建一個YBCell的屬性,如果一行播放聲音,它會停止播放其他單元並將其自身分配給該屬性。這種方式第一次將是nil

YBCell.m

- (IBAction)playOrStop:(id)sender 
{ 
    if (thisCellIsPlaying) 
    { 
     [self.audioPlayer stop]; 
     thisCellIsPlaying = FALSE; 
    } 
    else 
    { 
     YBViewController *vc = [[YBViewController alloc] init]; 
     [vc stopOtherCellPlaying]; 

     [self.audioPlayer play]; 
     [vc setPlayingCell:self]; 

     thisCellIsPlaying = TRUE; 
    } 
} 

YBViewController.h

@property (strong, nonatomic) YBCell *playingCell; 
- (void)stopPlaying; 

YBViewController.m

- (void) stopPlaying 
{ 
    [self.playingCell.audioPlayer stop]; 
} 

問題是,當我檢查self.playingCell-(void) stopPlaying它總是返回nil。而不是整個單元格,使用indexPath.row每個單元的標記不起作用,因爲它總是返回0.

如果沒有直接的答案,我可能會嘗試在視圖控制器中創建一個音頻播放器,讓細胞分享吧,但我認爲讓每個細胞都有自己的球員會更好。

+0

你最好在視圖控制器中創建播放器... – ChenSmile

回答

0

它看起來像你正在創建新的對象YBCell,並通過對象(AVaudioPlayer)從播放歌曲YBViewController .Declare您AVaudioplayer應用程序委託和來自YBCell & 訪問它YBViewController