MPMmoviPlayerView控制器导航栏中的Backbarbutton项

时间:2012-12-17 01:32:44

标签: ios uinavigationbar mpmovieplayercontroller uinavigationitem backbarbuttonitem

我已经以编程方式向MPMoviePlayerViewController添加了一个导航栏。如何将后退按钮项添加到导航栏以导航到以前的视图控制器?

-(IBAction)playA1{

NSURL * urlA1 = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"A1"ofType:@"mp4"]]; 

MPMoviePlayerViewController *playercontrollerA1 = [[MPMoviePlayerViewController alloc] initWithContentURL:urlA1];
 playercontrollerA1.moviePlayer.repeatMode = MPMovieRepeatModeOne;
//    [self presentMoviePlayerViewControllerAnimated:playercontrollerA1]; //comment out if navigation bar code is added
playercontrollerA1.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

// ADD UI NAVIGATION BAR in EMBEDDED CONTROL STYLE

playercontrollerA1.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
UINavigationController *movieNavController = [[UINavigationController alloc] initWithRootViewController:playercontrollerA1];
playercontrollerA1.navigationItem.title=@"APone";
playercontrollerA1.navigationController.navigationBar.tintColor = [UIColor blackColor];

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(favouriteButtonClicked:)];
playercontrollerA1.navigationItem.rightBarButtonItem = button;
[self presentViewController:movieNavController animated:YES completion:nil];

}

3 个答案:

答案 0 :(得分:0)

我认为您使用UINavigationController作为错误的方法。当你调用presentViewController传递UINavigationController作为ViewController时,你不是“导航”。你只是要求展示一个viewcontroller。

“自”是UIViewController吗?如果是,请将其更改为UINavigationController并调用pushViewController而不是UIViewController的presentViewController方法。

答案 1 :(得分:0)

看看

但我认为你问这个问题的方式表明你可能会对navigationController,navigationBar和相关的viewControllers的角色感到困惑。

您尚未向MPMoviePlayerViewController添加导航栏,反之亦然 - 您已将MPMoviePlayerViewController添加到导航控制器(movieNavController),因为它是rootViewController。 MovieNavController显示导航栏

标准后退栏按钮项由导航栏中的navController提供,用于导航回到包含viewControllers的堆栈 - 以rootViewController(导航堆栈中的第一个viewController)结束。因此,当您在堆栈上只有一个rootViewController时,没有任何内容可以返回,也没有显示backBarButtonItem。

如果你想从navigationController返回到首先出现它的实体,那么通常可以在呈现对象中找到对它的控制。例如,您可能在UITabBarController中包含一组navigationControllers - 在这种情况下,通过UITabBarController控制从一个导航控制器到另一个导航控制器的导航。

如果你想要在导航栏中添加一个自定义按钮,让你从导航控制器回来,上面链接的问题应该会给你一个良好的开端。

正如里卡多指出的那样,

[self presentViewController:movieNavController animated:YES completion:nil]在这种背景下似乎没有意义。

答案 2 :(得分:0)

以下代码对我有用。

NSURL * urlA1 = [NSURL fileURLWithPath:[[NSBundle mainBundle]    pathForResource:@"A1"ofType:@"mp4"]];
MPMoviePlayerViewController *playercontrollerA1 = [[MPMoviePlayerViewController alloc] initWithContentURL:urlA1];
playercontrollerA1.moviePlayer.repeatMode = MPMovieRepeatModeOne;
playercontrollerA1.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
playercontrollerA1.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
playercontrollerA1.moviePlayer.controlStyle = MPMovieControlStyleNone;
playercontrollerA1.navigationItem.title=@"APone";
playercontrollerA1.navigationController.navigationBar.tintColor = [UIColor blackColor];
[self.navigationController pushViewController:playercontrollerA1 animated:YES];