2011-05-04 67 views
0

好的这里的场景:使用@protocol控制来自UITableViewController的主视图控制器的音频?

我正在使用AVAudioPlayer。

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

mp3素材资源位于我的文档目录中。

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

我不能做的是控制音频一旦弹出消失与我的主视图控制器上的控件。 (播放/停止/音量)

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

@protocol SongChooserDelegate

- (无效)didTap:(NSData的*)的数据; < ------------我猜这里

@end

如果这是行不通的 - 什么会?

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

回答

0

我花了一段时间,但我终于明白了这一点: 如果任何人想要和解释或所有的代码,让我知道。

//UITableViewController.h

@protocol SongChooserDelegate

- (无效)didTap:(NSURL *)songUrl;

@end

//UITableView.m

  • (无效)viewDidLoad中 { [self.player prepareToPlay];

    //指向文档目录 NSString * path = [NSHomeDirectory() stringByAppendingPathComponent:@“Documents”]; NSError * error = nil; NSArray * array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:& error]; (array == nil){ //处理错误 } self。歌曲=数组;

    [super viewDidLoad];

}

  • (无效)的tableView:(UITableView的*)的tableView didSelectRowAtIndexPath方法:(NSIndexPath *)indexPath {

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

    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

- (无效)didTap: (NSURL *)songUrl {

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

[player prepareToPlay];

}

相关问题