UIWebView модальный проигрыватель YouTube "Готово" кнопка действия - PullRequest
9 голосов
/ 11 мая 2011

В моем приложении для iPhone я представляю модальный контроллер вида с домашнего экрана с UIWebView, который отображает встроенное видео YouTube, используя это:

UIWebView *youTubeWV = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 220)];
        [youTubeWV loadRequest:[NSURLRequest requestWithURL:sourceURL]];
        //NSString *youTubeVideoHTML = [NSString stringWithFormat:@"<embed id=\"yt\" src=\"http://www.youtube.com/watch?v=CadgUJRZfEE\" type=\"application/x-shockwave-flash\" width=\"320\" height=\"220\"></embed>"];
        NSString *youTubeVideoHTML =@"<html><head>"
        "<meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = 220\"/></head>"
        "<body style=\"background:#FFFFF;margin-top:0px;margin-left:0px\">"
        "<div><object width=\"320\" height=\"220\">"
        "<param name=\"wmode\" value=\"transparent\"></param>"
        "<embed src=\"http://www.youtube.com/v/W-nzUoaI2Ss?f=user_favorites&app=youtube_gdata\""
        "type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"320\" height=\"220\"></embed>"
        "</object></div></body></html>";
        [youTubeWV loadHTMLString:youTubeVideoHTML baseURL:nil];
        [self.view addSubview:youTubeWV];

Видео отображается без проблем в модальном представлении «QuickTime Player», который показывает. Однако, когда я нажимаю «Готово», чтобы закрыть второй модальный режим, меня пинают обратно к самому первому экрану, минуя мой первый модальный вид. И на моем домашнем экране теперь все кнопки не работают. Странно!

ОБНОВЛЕНИЕ: я удалил модальный переход со своего домашнего экрана и сделал его «pushViewController», и теперь все работает правильно. Так что проблема в том, что проигрыватель YouTube отклоняет 2 модала одновременно. Как это можно исправить?

Есть идеи?

Ответы [ 3 ]

12 голосов
/ 06 декабря 2011

Я не уверен, но кажется, что после нажатия кнопки «Готово» и закрытия проигрывателя элемент управления возвращается к контроллеру корневого представления, в вашем случае это ваш первый экран.

Напримерв моем приложении у меня есть UITabBarController в качестве моего rootViewController, в моем AppDelegate у меня есть что-то вроде этого:

self.window.rootViewController = self.myTabBarController;

Так вот почему мой tabBarController (мой первый экран) всегда был представлен после нажатия «Done»кнопка.

Я решил эту настройку моего Модального Представления как мой rootViewController после его представления.

Попробуйте после представления вашего модального представления:

MyAppDelegate *appDelegate = (MyAppDelegate *) [[UIApplication sharedApplication] delegate];
[self presentModalViewController: myModalViewController animated: YES];
[self.appDelegate.window setRootViewController: myModalViewController];

ПРИМЕЧАНИЕ. После отклонения модального вида вы должны восстановить контроллер корневого представления, выполнив

В моем случае:

self.appDelegate.rootViewController = self.appDelegate.myTabBarController;

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

0 голосов
/ 06 марта 2012

Ответ: «Я решил эту настройку моего Модального Представления как мой rootViewController после его представления». это правильный подход. Если вы вызываете youtube из модально представленного контроллера представления, он вернется к исходному контроллеру, который представил модальный контроллер. Если вы затем попытаетесь повторно представить правильный контроллер, используя флаги, это будет очень грязно, и могут возникнуть проблемы с синхронизацией. Метод Исаакцито работает правильно.

0 голосов
/ 19 августа 2011

Не точное решение, но какой-то патч может помочь вам.

Возьмите глобальный флаг (может быть в ApplicationDelegate) и установите его в значение true, когда вы нажимаете кнопку Done на странице YouTube. И в самом первом контроллере viewWillAppear проверьте, установлен ли флаг в значение ИСТИНА, затем представьте второй контроллер и снова установите флаг в значение ЛОЖЬ.

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

...