在uiwebview中播放YouTubevideo。 如何处理“完成”button?

我有一个uiwebview播放YouTubevideo。 我如何处理完成的button操作? 现在,当我点击完成button时,它会变回到我的应用程序主菜单(而不是本应该解雇的菜单),它只是冻结。 任何人都可以帮我吗?

Ps:uiwebview所在的菜单,以前是以模态方式呈现的。

YouTube插件播放器本身就是一个模式视图控制器。 当完成button被按下时,它返回到其presentingViewController控制器。 它的presentsViewController不是你的模态视图控制器,而是调用[presentModalViewController:animated:]来显示你的模态视图控制器的viewController。 由于原来的模式视图控制器仍然活跃,应用程序performance不佳。

要解决这个问题,

1)跟踪模态视图控制器是否已经呈现,但没有被解雇。

2)在呈现视图控制器的viewDidAppear方法中,如果呈现模态视图控制器并且不被解散,则解除并再次呈现。

例如,在呈现模态Web视图控制器的控制器中:

  - (void) presentModalWebViewController:(BOOL) animated { // Create webViewController here. [self presentModalViewController:webViewController animated:animated]; self.modalWebViewPresented = YES; } - (void) dismissModalWebViewController:(BOOL) animated { self.modalWebViewPresented = NO; [self dismissModalViewControllerAnimated:animated]; } - (void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (self.modalWebViewPresented) { // Note: iOS thinks the previous modal view controller is displayed. // It must be dismissed first before a new one can be displayed. // No animation is needed as the YouTube plugin already provides some. [self dismissModalWebViewController:NO]; [self presentModalWebViewController:NO]; } } 

这个线程是非常有用的,并帮助我find问题!

lambmj的答案很好,但我find了一个更好的办法。 在呈现视图控制器中:

  - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (self.presentedViewController) { UIViewController *vc = self.presentedViewController; [vc dismissModalViewControllerAnimated:NO]; [self presentModalViewController:vc animated:NO]; } } 

希望这可以帮助!

@Gdx吴@lambmj

感谢您的方法,他们工作正常。 但是有一个小问题,点击完成button并直接跳到显示视图控制器,我们需要closures显示的模式视图控制器并再次显示,这会在这些视图控制器开关之间带来一些抖动(如闪光)。

在此基础上,我强烈build议@IsaacCisneros的方法将无缝切换。

当它进入全屏幕时,简单地删除UIWebView; 退出全屏时添加UIWebView。 下面的示例代码假设一个UIViewController与UIWebView的子视图,你的UIWebView应该有youtube iframe。

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // Add observer for "Done" button click [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerWillExitFullscreen:) name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerDidEnterFullscreen:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil]; } - (void)viewDidDisappear:(BOOL)animated { // Remove observers for "Done" button click [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil]; } - (void)playerWillExitFullscreen:(NSNotification *)notification { // Before exit full screen, add back UIWebView that have been removed earlier [self.view addSubview:self.webView]; } - (void)playerDidEnterFullscreen:(NSNotification *)notification { if (self.presentingViewController) { // UIWebView is presenting the build-in movie player controller [self.webView removeFromSuperview]; // Built-in movie player controller is already entering full screen mode } }