воспроизведение видео на YouTube внутри uiwebview.Как обращаться с кнопкой «Готово»? - PullRequest
10 голосов
/ 07 декабря 2011

У меня есть uiwebview, который воспроизводит видео на YouTube. Как я могу обработать готовое действие кнопки? Прямо сейчас, когда я нажимаю кнопку «Готово», она возвращается в главное меню моего приложения (а не в меню, которое должно было быть закрыто) и просто зависает. Может кто-нибудь помочь мне, пожалуйста?

Ps: меню, в котором находится uiwebview, ранее было представлено модально.

Ответы [ 4 ]

8 голосов
/ 03 февраля 2012

Плагин YouTube сам по себе является модальным контроллером вида.Он возвращается к своему presentingViewController, когда нажата кнопка «Готово».Его presentingViewController - это не ваш контроллер модального вида, а viewController, который вызвал [presentModalViewController:animated:] для представления вашего контроллера модального вида.Поскольку оригинальный контроллер модального вида все еще активен, приложение ведет себя плохо.

Чтобы устранить проблему,

1) Отслеживайте, был ли контроллер модального представления представлен, но не отклонен.

2) В методе viewDidAppear контроллера представления, если модальный контроллер представления был представлен и не отклонен, отклонить и представить его снова.

Например, в контроллере, который представляет модальныйКонтроллер веб-просмотра:

 - (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];
      }
  }
2 голосов
/ 17 февраля 2013

Эта тема очень полезна и помогает мне найти проблему!

Ответ от lambmj работает нормально, но я нашел лучший способ.В представлении вид контроллера:

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

Надеюсь, это поможет!

0 голосов
/ 05 февраля 2014

Просто удалите UIWebView, когда он входит в полноэкранный режим;добавить обратно UIWebView при выходе из полноэкранного режима.Пример кода ниже, предполагая UIViewController с подпредставлением UIWebView, и ваш UIWebView должен иметь iframe YouTube.

0 голосов
/ 19 февраля 2013

@ Gdx Wu @ lambmj

Спасибо за ваши методы, они отлично работают.Но есть небольшая проблема, заключающаяся в том, что после нажатия кнопки «Готово» и перехода непосредственно к представляемому контроллеру представления нам необходимо отклонить представленный контроллер модального представления и представить его снова, что приведет к некоторому колебанию (например, вспышке) между этими переключателями контроллера представления.

Исходя из этого, я настоятельно рекомендую метод @ IsaacCisneros , который бы легко переключался.

...