当用户单击单元格时,如何从表格详细信息视图中的数组加载视频?

时间:2013-11-16 17:02:01

标签: ios uitableview ios7

我已经加载了带有NSArray数据的表视图。现在,我想在详细视图中播放视频。播放的视频取决于用户点击的单元格。

如何测试单击的单元格并基于此加载阵列中的视频?

我在iOS 7中使用Xcode 5.

这是我的ViewController.m

#import "ViewController.h"
#import "VideoDetailViewController.h"

@interface ViewController ()
{
    NSMutableArray * titlearray;
    NSMutableArray * arrayVidSrc;

}
@end

@implementation ViewController
@synthesize mytableview;


- (void)viewDidLoad
{
    [super viewDidLoad];
    //sets delegate methods of table view
    self.mytableview.delegate=self;
    self.mytableview.dataSource=self;

    //assigns values to objects in array's
    titlearray = [[NSMutableArray alloc]initWithObjects:@"intro", @"skating",nil];

    arrayVidSrc = [[NSMutableArray alloc]initWithObjects:@"Step1-Intro.mp4", @"Step2-Skating.mp4", nil];
}

// returns one section in the table
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

//counts the items in the title array
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [titlearray count];

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier =@"vidCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath: indexPath];

    cell.textLabel.text  = [titlearray objectAtIndex:indexPath.row];

    return cell;

}


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"showDetailsSeg"]) {
        NSIndexPath *indexpath =nil;
        NSString *titlestring =nil;

        indexpath = [mytableview indexPathForSelectedRow];
        titlestring = [titlearray objectAtIndex:indexpath.row];

        NSURL * movieURL = [arrayVidSrc objectAtIndex:indexpath.row];
        MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL: movieURL];
        [[player view] setFrame: [self.view bounds]];
        [self.view addSubview: [player view]];
        [player play];

        [[segue destinationViewController] setTitlecontents:titlestring];
    }
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

这是我的ViewController.h

 #import <UIKit/UIKit.h>
    #import <MediaPlayer/MediaPlayer.h>

    //allows us to use the delegate methods of table view
    @interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>  

    @property (weak, nonatomic) IBOutlet UITableView *mytableview;



    @end

我有一个自定义视图控制器类VideoDetailViewController.m:

#import "VideoDetailViewController.h"

@interface VideoDetailViewController ()

@end

@implementation VideoDetailViewController

@synthesize arrayVidSrc = _arrayVidSrc;
@synthesize titlelabel;
@synthesize navBar;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    self.titlelabel.text = self.titlecontents;
    self.navBar.title = self.titlecontents;




    //video load from array
   // NSURL * movieURL = [_arrayVidSrc objectAtIndex:NSIndexPath.row];

    //Play the movie now
    /*MPMoviePlayerViewController *playercontroller = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
    [self presentMoviePlayerViewControllerAnimated:playercontroller];
    playercontroller.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
    [playercontroller.moviePlayer play];
    playercontroller = nil;*/


}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

以及随之而来的.h文件:

 #import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>

@interface VideoDetailViewController : UIViewController
@property (weak, nonatomic) IBOutlet UINavigationItem *navBar;
@property (weak, nonatomic) IBOutlet UILabel *selectedRow;
@property (strong, nonatomic) NSString * titlecontents;
@property (weak, nonatomic) IBOutlet UILabel * titlelabel;
@property (strong, nonatomic) NSArray *arrayVidSrc;


@end

1 个答案:

答案 0 :(得分:0)

实施方法- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender。发件人是被点击的单元格。然后,您可以调用类似[self.tableView indexPathForCell:sender]的内容来获取单元格地址,并使用返回索引路径的行从数组中选择视频。

在segue结束时显示的新视图控制器在prepareForSegue::方法中可用作[segue destinationViewController],您可以随意传递它。