在我的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种模态的问题。如何解决这个问题?
有什么想法吗?
我不确定,但似乎在按下"完成"按钮并关闭播放器后,控件返回到根视图控制器,在您的情况下,这是您的第一个屏幕。
例如,在我的应用程序中,我有一个UITabBarController作为我的rootViewController,在我的AppDelegate中,我有这样的东西:
self.window.rootViewController = self.myTabBarController;
这就是为什么我的tabBarController(我的第一个屏幕)总是在按下"完成"按钮后显示的原因。
在呈现它之后,我解决了将我的模态视图作为我的根视图控制器的此设置。
在呈现您的模态视图后尝试此操作:
MyAppDelegate *appDelegate = (MyAppDelegate *) [[UIApplication sharedApplication] delegate];
[self presentModalViewController: myModalViewController animated: YES];
[self.appDelegate.window setRootViewController: myModalViewController];
注意:关闭模式视图后,必须恢复根视图控制器
就我而言:
self.appDelegate.rootViewController = self.appDelegate.myTabBarController;
希望对你有帮助
不是一个确切的解决方案,但一种补丁可能会帮助你。
获取全局标志(可能在应用程序代表中),并在点击YouTube页面上Done
按钮时将其设置为true。在第一个控制器视图中WillAppear检查标志是否为TRUE,然后显示第二个控制器并再次将标志变为FALSE。
希望对您有所帮助。
答案是:"我在呈现模态视图后解决了将我的模态视图设置为我的根视图控制器的问题"是正确的方法。如果您从模态呈现的视图控制器调用 youtube,它将返回到呈现模态的原始控制器。如果您随后尝试使用标志重新呈现正确的控制器,它会变得非常混乱,并且可能会出现计时问题。Izaakcito的方法工作正常。