jouer à la video youtube à l'intérieur de uiwebview. Comment gérer le button "fait"?

J'ai un uiwebview qui joue une video sur youtube. Comment puis-je gérer l'action du button fait? À l'heure actuelle, lorsque j'appuie sur le button Terminé, je reviens au menu principal de mon application (pas au menu qui était supposé ignorer) et il se fige. Quelqu'un peut-il m'aider s'il-vous-plaît?

Ps: le menu où se trouve l'uiwebview, était auparavant présenté de manière modale.

Le lecteur de plug-in YouTube est lui-même un controller de vue modale. Il returnne à son presentingViewController lorsque le button done est pressé. Son presentingViewController n'est pas votre controller de vue modale, mais plutôt le viewController qui a appelé [presentModalViewController:animated:] pour présenter votre controller de vue modale. Étant donné que le controller de vue modale d'origine est toujours actif, l'application se comporte mal.

Pour résoudre le problème,

1) Vérifier si le controller de vue modale a été présenté mais pas rejeté.

2) Dans la méthode viewDidAppear du controller de vue de présentation, si le controller de vue modale a été présenté et non rejeté, renvoyez-le et présentez-le à nouveau.

Par exemple, dans le controller qui présente le controller de vue Web modale:

  - (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]; } } 

Ce fil est très utile et m'aide à find le problème!

La réponse de lambmj fonctionne bien, mais j'ai trouvé un meilleur moyen. En présentant le controller de vue:

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

J'espère que cela t'aides!

@Gdx Wu @lambmj

Merci pour vos methods, elles fonctionnent bien. Mais il y a un petit problème qui après avoir cliqué sur le button terminé et en sautant directement au controller de vue de présentation, nous devons rejeter le controller de vue modale présenté et le présenter à nouveau, ce qui amènerait un peu de tremblement entre ces commutateurs.

Sur cette base, je recommand fortement la méthode de @IsaacCisneros qui permuterait de façon transparente.

Il suffit de supprimer UIWebView quand il entre en plein écran; append UIWebView quand il quitte le plein écran. Exemple de code ci-dessous en supposant un UIViewController avec sous-vue de UIWebView, et votre UIWebView devrait avoir 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 } }