0

我以编程方式向 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];

}

4

3 回答 3

0

我认为您使用 UINavigationController 作为错误的方法。当您调用 presentViewController 并将 UINavigationController 作为 ViewController 传递时,您不是在“导航”。你只是要求显示一个视图控制器。

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

于 2012-12-17T03:55:48.547 回答
0

看一眼

但我认为您提出问题的方式表明您可能对navigationController、navigationBar 和关联的viewController 的角色感到困惑。

您尚未将导航栏添加到 MPMoviePlayerViewController,而是相反 - 您已将 MPMoviePlayerViewController 添加到导航控制器 (movieNavController),因为它是 rootViewController。MovieNavController 呈现导航栏

标准的后退栏按钮项目由导航栏中的 navController 提供,以通过包含的 viewController 堆栈导航您返回 - 以您的 rootViewController(导航堆栈中的第一个 viewController)结束。所以当你在栈上只有一个 rootViewController 时,没有什么可以返回,也没有 backBarButtonItem 出现。

如果您想从 navigationController 回到最初呈现它的实体,通常会在呈现对象中找到该控件。例如,您可能有一组包含在 UITabBarController 中的导航控制器 - 在这种情况下,从一个导航控制器到另一个导航控制器的导航是通过 UITabBarController 控制的。

如果您确实想向导航栏添加自定义按钮以使您从该导航控制器返回,那么上面链接的问题应该会给您一个良好的开端。

[self presentViewController:movieNavController animated:YES completion:nil]正如里卡多指出的那样,在这种情况下似乎没有意义。

于 2012-12-17T04:09:37.473 回答
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];
于 2012-12-17T16:03:02.080 回答