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

Objective-C How to play a sound when a cell's button is tapped?

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

我不知道如何为我的 table 视图单元实现 sounds/audio 文件数组。

我的 UITableViewCell 上有一个按钮插座和动作。但我不确定如何在 tableview.m 中初始化我的 AVaudioplayer,特别是在:

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

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

你可以这样试试:

  1. 导入AVFoundation.framework

  2. 将此代码放在 didSelectRowAtIndexPath 方法中

    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"your sound name" ofType:@"mp3"];

    NSURL *soundUrl = [NSURL fileURLWithPath:soundPath];

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

注意:将您的音频文件添加到项目中,然后将名称放入一个数组中。然后您可以使用基于 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.create 属性 在您的 AVAudioPlayer 的 .h 或 .m 文件中。喜欢

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

@synthesize audioPlayer;

3.implement 此代码在 :

-(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);
}

快乐编码其工作请检查:

Mate 你主要需要用到两个东西 第一次导入 AVFounfation.framwork 第二次执行代码 id "didSelectRowAtIndexPath" 更多细节

-(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!");
}
}

}