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 的情况下播放 youtube 视频或在 youtube 视频开始使用 webview 播放时检测视频播放器?
如何从 UIWebView 嵌入式 YouTube 视频播放接收 NSNotifications