UIWebView 模态 YouTube 播放器“完成”按钮操作

Posted

技术标签:

【中文标题】UIWebView 模态 YouTube 播放器“完成”按钮操作【英文标题】:UIWebView modal YouTube player "Done" button action 【发布时间】:2011-08-22 23:53:00 【问题描述】:

在我的 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];

视频在显示的模式视图“快速播放器”中显示没有问题。然而,当我点击“完成”关闭第二个模态时,我被踢回第一个屏幕,绕过了我的第一个模态视图。在我的主屏幕上,现在所有按钮都不起作用。奇怪!

更新:我从主屏幕中删除了模态转换,并将其改为“pushViewController”,现在一切正常。所以这是 YouTube 播放器同时关闭 2 个模态的问题。如何解决这个问题?

有什么想法吗?

【问题讨论】:

希望我先看到你的问题。我在这里发布了一个类似问题的答案:***.com/a/9129304。 【参考方案1】:

答案是:“我在展示它后解决了这个设置我的模态视图作为我的 rootViewController 的问题。”是正确的做法。如果您从模态呈现的视图控制器调用 youtube,它将返回到呈现模态视图的原始控制器。如果您然后尝试使用标志重新呈现正确的控制器,它会变得非常混乱并且可能存在时间问题。 Izaakcito 的方法可以正常工作。

【讨论】:

【参考方案2】:

我不确定,但似乎在按下“完成”按钮并关闭播放器后,控件返回到根视图控制器,在您的情况下,这是您的第一个屏幕。

例如,在我的应用程序中,我有一个 UITabBarController 作为我的 rootViewController,在我的 AppDelegate 中我有这样的东西:

self.window.rootViewController = self.myTabBarController;

这就是为什么我的 tabBarController(我的第一个屏幕)总是在按下“完成”按钮后出现的原因。

我在展示后解决了这个设置我的模态视图作为我的 rootViewController 的问题。

在展示你的模态视图后试试这个:

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

注意:关闭模式视图后,您必须恢复根视图控制器

就我而言:

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

希望对你有帮助

【讨论】:

【参考方案3】:

不是一个确切的解决方案,但一种补丁可以帮助你。

当您点击 youtube 页面上的 Done 按钮时,获取一个全局标志(可能在 ApplicationDelegate 中)并将其设置为 true。并在第一个控制器 viewWillAppear 中检查标志是否为 TRUE,然后呈现第二个控制器并再次将标志设为 FALSE。

希望对你有帮助。

【讨论】:

以上是关于UIWebView 模态 YouTube 播放器“完成”按钮操作的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView 中的嵌入式 youtube 播放器正在破坏视图层次结构

在UIWebView中停止视频

如何在没有 UIWebView 的情况下播放 youtube 视频或在 youtube 视频开始使用 webview 播放时检测视频播放器?

如何从 UIWebView 嵌入式 YouTube 视频播放接收 NSNotifications

为啥我的 UIWebView 不显示 Javascript YouTube 播放器 iFrame?

我可以在 UIWebView 内联(不是全屏)中播放 youtube 视频吗?