0

好的,这是场景:

我正在使用 AVAudioPlayer。

我正在尝试从 UITableView 中选择并播放一首歌曲,该歌曲显示为弹出框。

mp3 资产位于我的文档目录中。

我可以填充表格视图,当我选择一行时,播放该特定资产。

我不能做的是在弹出框消失后使用我的主视图控制器上的控件控制音频。(播放/停止/音量)

我有@protocol,它使popover成为一个委托,任何人都可以帮助我了解我的协议中的方法的语法吗?

@protocol SongChooserDelegate

-(void) didTap:(NSData *) 数据;<------------我猜这里

@结尾

如果这不起作用 - 什么会?

谢谢,任何帮助将不胜感激......这是我为周五到期的高级论文构建应用程序的最后一步!!!!哎呀。

4

1 回答 1

0

我花了一段时间,但我终于想通了:如果有人想要解释或所有代码,请告诉我。

//UITableViewController.h

@protocol SongChooserDelegate

-(void) didTap:(NSURL *)songUrl;

@结尾

//UITableView.m

  • (void)viewDidLoad { [self.player prepareToPlay];

    // 指向文档目录 NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSError *error = nil; NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error]; if (array == nil) { // 处理错误 } self.songs = array;

    [超级视图DidLoad];

}

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

    UIAlertView *showSelection; NSString *消息;message = [[NSString alloc] initWithFormat:@"%@", [songs objectAtIndex:indexPath.row]]; showSelection = [[UIAlertView alloc] initWithTitle:@"Track Selected" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [showSelection show];[showSelection 发布];【消息发布】;

    NSString *applicationDocumentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *filePath = [applicationDocumentsDirectory stringByAppendingPathComponent: [songs objectAtIndex:indexPath.row]]; NSURL *url = [NSURL fileURLWithPath:filePath];

    [self.delegate didTap:url];

    }

//ViewController.h

@interface ViewController : UIViewController < SongChooserDelegate, AVAudioPlayerDelegate >

//ViewController.m

-(void) didTap:(NSURL *)songUrl{

 player = [[AVAudioPlayer alloc]initWithContentsOfURL:songUrl error:nil];

[播放器准备播放];

}

于 2011-05-05T12:47:23.407 回答