我有一个UIWebView用于播放YouTube视频。如何处理"完成"按钮的操作? 目前,当我点击该按钮时,它会切换回我的应用程序主菜单(而不是应该关闭的菜单),并且只会冻结。 请问有谁能帮助我吗?
附:包含UIWebView的菜单之前是以模态方式呈现的。
- (void) presentModalWebViewController:(BOOL) animated {
// Create webViewController here.
[self presentModalViewController:webViewController animated:animated];
self.modalWebViewPresented = YES;
}
- (void) dismissModalWebViewController:(BOOL) animated {
self.modalWebViewPresented = NO;
[self dismissModalViewControllerAnimated:animated];
}
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (self.modalWebViewPresented) {
// Note: iOS thinks the previous modal view controller is displayed.
// It must be dismissed first before a new one can be displayed.
// No animation is needed as the YouTube plugin already provides some.
[self dismissModalWebViewController:NO];
[self presentModalWebViewController:NO];
}
}
这篇帖子非常有用,帮我找到了问题所在!
lambmj的答案很好,但我发现了更好的方法。在展示视图控制器时:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (self.presentedViewController) {
UIViewController *vc = self.presentedViewController;
[vc dismissModalViewControllerAnimated:NO];
[self presentModalViewController:vc
animated:NO];
}
}
@Gdx Wu @lambmj
感谢你们的方法,它们很有效。但是有一个小问题,就是在点击完成按钮并直接跳转到展示视图控制器后,我们需要解除弹出的模态视图控制器并再次呈现它,这将在这些视图控制器之间产生一些闪烁的过渡效果。
基于此,我强烈推荐@IsaacCisneros的方法,它可以实现无缝切换。
当 UIWebView 进入全屏模式时,简单地将其移除;当退出全屏模式时,再添加回 UIWebView。下面是示例代码,假设您的 UIViewController 具有 UIWebView 子视图,并且您的 UIWebView 应该具有 YouTube iframe。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Add observer for "Done" button click
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerWillExitFullscreen:)
name:@"UIMoviePlayerControllerWillExitFullscreenNotification"
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerDidEnterFullscreen:)
name:@"UIMoviePlayerControllerDidEnterFullscreenNotification"
object:nil];
}
- (void)viewDidDisappear:(BOOL)animated {
// Remove observers for "Done" button click
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
}
- (void)playerWillExitFullscreen:(NSNotification *)notification {
// Before exit full screen, add back UIWebView that have been removed earlier
[self.view addSubview:self.webView];
}
- (void)playerDidEnterFullscreen:(NSNotification *)notification {
if (self.presentingViewController) { // UIWebView is presenting the build-in movie player controller
[self.webView removeFromSuperview]; // Built-in movie player controller is already entering full screen mode
}
}