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

时间:2011-05-11 04:42:26

标签: iphone uiwebview youtube

在我的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 个答案:

答案 0 :(得分:12)

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

对于我的应用程序中的exaple我有一个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;

希望有所帮助

答案 1 :(得分:0)

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

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

希望它有所帮助。

答案 2 :(得分:0)

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