我在TableView
中设置了storyboard
,并且有一个用于保存图像的原型单元格和一个用于启动视频的按钮。视频文件的路径是每个单元格对象中的属性,我想在单击按钮时播放视频。
在我开始使用该表之前(当我在故事板上手动绘制按钮时)我使用了以下来启动电影播放器[self presentMoviePlayerViewControllerAnimated:mp];
,但显然现在这是不可能的。
我确定我错过了一些明显的东西......
答案 0 :(得分:1)
最佳解决方案是NSNotificationCenter
。单击“单击”,在“单元格”中,只发送包含行索引的通知,您可以将其保存在按钮的标记变量中。
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObject:@"playVideo" forKey:@"operationKey"];
[userInfo setValue: indexPath forKey:@"indexPathRow"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"PlayVideoNotification" object:nil userInfo:userInfo];
在ViewController寄存器中观察者:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivePlayVideoNotification:) name:@"PlayVideoNotification" object:nil];
不要忘记取消注册观察员:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"PlayVideoNotification" object:nil];
在方法PlayVideoNotification
中,做你需要的事情:
- (void) receivePlayVideoNotification:(NSNotification *) notification
{
NSDictionary *userInfo = notification.userInfo;
NSString *operationKey = [userInfo objectForKey:@"operationKey"];//"playVideo"
NSString* indexPathRow = [userInfo objectForKey:@"indexPathRow"];
//todo
}
答案 1 :(得分:0)
据我所知,你必须转到另一个ViewController并在那里启动moviePlayerViewController。 我认为当你点击TableViewCell时,你不能只获得IBAction。
因此尝试在InterFaceBuilder中进行segue,使用以下内容构建一个ViewController: ViewController.h:
@interface ViewController : UIViewController
@property (nonatomic, strong) NSURL *videoFileUrl;
@end
ViewController.m:
@implementation ViewController
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
...
[self presentMoviePlayerViewControllerAnimated:mp];
}
@end
答案 2 :(得分:0)
我认为您应该使用自定义单元格来实现您的目标。 您可以按照以下步骤操作:
在主类.m文件中使用此方法播放视频
- (void)playBtnClicked:(id)sender {
MPMoviePlayerViewController *movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:YourURL];
[self presentMoviePlayerViewControllerAnimated:movieController];
[movieController.moviePlayer play];
}
配置好单元格后使用此代码
[cell.btn_PlayVideo addTarget:self action:@selector(playBtnClicked:) forControlEvents:(UIControlEventTouchUpInside)];
您应该确保包含MediaPlayer.framework并导入MediaPlayer.h文件。