Objective-C点击单元格按钮时如何播放声音?

时间:2017-04-14 09:41:17

标签: objective-c nsarray tableview avfoundation avplayer

我在每个单元格上都有一个按钮,当按下按钮时,我想从每个单元格的数组中播放不同的音频文件。

我不知道如何为我的表格视图单元格实现声音/音频文件数组。

我的UITableViewCell上有一个按钮插座和操作。但我不确定如何在tableview.m中初始化我的AVaudioplayer,具体如下:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell22";

下面我插入了我想要实现的项目的图像。 image1

4 个答案:

答案 0 :(得分:3)

您可以尝试这样:

  1. 导入AVFoundation.framework

  2. 将此代码放在didSelectRowAtIndexPath方法

    NSString * soundPath = [[NSBundle mainBundle] pathForResource:@“你的声音名称”ofType:@“mp3”];

    NSURL * soundUrl = [NSURL fileURLWithPath:soundPath];

    AVAudioPlayer * player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil]; [玩家玩];

  3. 注意:将您的音频文件添加到项目中,然后将名称放入一个数组中。然后,您可以使用基于indexPath的音频名称。

    如果您想在tableViewCell点击按钮时播放声音,请将标记indexPath添加到该按钮,并在cellForRowAtIndexPath方法

    中向此按钮添加操作
    button.tag = indexPath.row;
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    

    并在按钮操作中粘贴相同的代码。但请使用sender.tag代替indexPath.row

    -(void)buttonPressed:(UIButton *)sender
    {
        NSString *soundName = [yourArray objectAtIndex:sender.tag];
    
        NSString *soundPath = [[NSBundle mainBundle] pathForResource:soundName ofType:@"mp3"];
    
        NSURL *soundUrl = [NSURL fileURLWithPath:soundPath];
    
        AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil]; [player play];
    }
    

答案 1 :(得分:0)

现在检查我更新的代码:播放声音

1.为你的AVAudioPlayer创建.h或.m文件中的属性。喜欢

@property (strong, nonatomic) AVAudioPlayer *audioPlayer;
  1. 在.m文件和
  2. 中声明 <AVAudioPlayerDelegate>

    @synthesize audioPlayer;

    3.在以下代码中实现此代码:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath {

     yourSoundArray=[NSArray arrayWithObjects:@"sss",@"sss",@"sss",@"sss",@"sss",@"sss", nil];//dont include formate type
    
    
       NSString *audioPath = [[NSBundle mainBundle] pathForResource: [yourSoundArray objectAtIndex:indexPath.row] ofType:@"mp3"];
                        NSLog(@"%@",audioPath);
    
                        NSURL *audioURL = [NSURL fileURLWithPath:audioPath];
    
                        NSError *audioError = [[NSError alloc] init];
                        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&audioError];
                        audioPlayer.delegate=self;
    
                     if (!audioError) {
                            NSLog(@"playing!");
                            audioPlayer play];
                      }
                        else {
                              NSLog(@"Error!");
                        }
    

    4

    -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
    {
        NSLog(@"%d",playing the audio);
    }
    

    快乐编码工作请检查:

答案 2 :(得分:0)

伴侣你需要主要使用两件事 第一次导入AVFounfation.framwork 第二个代码id“didSelectRowAtIndexPath” 更多细节 的 Xcode 6 - Press button to play sound

答案 3 :(得分:0)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *selectedCell=[tableView cellForRowAtIndexPath:indexPath];
NSLog(@"%@",selectedCell.textLabel.text);
AVAudioPlayer *audioPlayer101;

if ([_detailPhrases isEqualToString:@"Basics"]){


NSArray *soundArray = [NSArray arrayWithObjects:@"cellTapSound", @"Second", nil];

NSString *audioPath = [[NSBundle mainBundle] pathForResource: [soundArray objectAtIndex:indexPath.row] ofType:@".mp3"];
NSURL *audioURL = [NSURL fileURLWithPath:audioPath];
NSError *audioError = [[NSError alloc] init];
audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&audioError];

if (!audioError) {
    [audioPlayer101 play];
    NSLog(@"playing!");
}
else {
    NSLog(@"Error!");
}
}

}