从可重用的UITableViewCell对象开始播放视频

时间:2014-04-30 07:30:32

标签: ios objective-c uitableview

我在TableView中设置了storyboard,并且有一个用于保存图像的原型单元格和一个用于启动视频的按钮。视频文件的路径是每个单元格对象中的属性,我想在单击按钮时播放视频。

在我开始使用该表之前(当我在故事板上手动绘制按钮时)我使用了以下来启动电影播放器​​[self presentMoviePlayerViewControllerAnimated:mp];,但显然现在这是不可能的。

我确定我错过了一些明显的东西......

3 个答案:

答案 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)

我认为您应该使用自定义单元格来实现您的目标。 您可以按照以下步骤操作:

  1. 创建一个新类,它是UITableViewCell的子类,并将其指定为自定义单元格的类。
  2. 在您的自定义类.h文件中为您的按钮创建一个IBOutlet。
  3. 在主类.m文件中使用此方法播放视频

    - (void)playBtnClicked:(id)sender {
    MPMoviePlayerViewController *movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:YourURL];
    [self presentMoviePlayerViewControllerAnimated:movieController];
    [movieController.moviePlayer play];
    }
    
  4. 配置好单元格后使用此代码

    [cell.btn_PlayVideo addTarget:self action:@selector(playBtnClicked:) forControlEvents:(UIControlEventTouchUpInside)];
    
  5. 您应该确保包含MediaPlayer.framework并导入MediaPlayer.h文件。