如何以编程方式关闭 UIWebView 的上下文菜单?
Posted
技术标签:
【中文标题】如何以编程方式关闭 UIWebView 的上下文菜单?【英文标题】:How to dismiss contextual menu of UIWebView programmatically? 【发布时间】:2015-05-29 11:28:15 【问题描述】:我有一个 iPad 应用程序,其中 UIWebView
正在加载一个 html 页面,该页面由 href 标记中的 n 个电话号码组成。
点击这些电话号码后,ios 默认的contextual
菜单(如弹出式控制器)会显示 3 个默认选项,例如 --- 发送消息、添加到联系人和复制。
在某个时间点,我只是将所有UIViewController
弹出到rootViewController
,所以当这个动作被执行时,如果这个contextual
菜单显示在屏幕上,那么即使当视图来自rootViewController
视图,该视图由UIWebView
和电话号码组成。我猜这是因为contextual
菜单是从UIWindow
显示的(比如UIAlertView
)。
此时我想以编程方式关闭或隐藏此 contextual
菜单。
我已经尝试通过以下尝试来实现这一目标,
1) 在viewDidDisappear
,
[UIMenuController sharedMenuController].menuVisible = NO;
2)我尝试了如下快速枚举,
for (UIView *subView in view.subviews)
if ([subView isKindOfClass:[UIPopoverController class]])
[(UIPopoverController *)subViews dismissPopoverAnimated:YES];
//similiarly I tried by checking for UIMenuController as well
上述尝试均未成功实现这一目标。
谁能告诉我如何以编程方式关闭UIWebView
的contextual
菜单?
提前感谢任何帮助。
【问题讨论】:
【参考方案1】:在弹出到根视图控制器之前,您可以使用
目标-C:
[self dismissViewControllerAnimated:NO completion:nil];
斯威夫特:
self.dismissViewControllerAnimated(false, completion: nil)
摆脱上下文菜单。
【讨论】:
感谢您的回复,但这对我也不起作用 :-( 我的问题是在弹出视图控制器之前,上下文菜单已经在屏幕中,并且即使在关闭当前视图后也会出现在 viewWillDisappear视图控制器或弹出到 rootview 控制器,屏幕上的弹出窗口仍然存在于屏幕上,因为它是从 iOS 添加到窗口的,我猜想 UIAlertViews 我设法重新创建了您的问题并通过将其放入包含 Web 视图的视图控制器中来修复它。那么弹出到root的整个动作就是 self.dismissViewControllerAnimated(false, completion: nil) self.navigationController!.popToRootViewControllerAnimated(true) 你确定你在正确的地方关闭了视图控制器吗? 是的,我以同样的方式做到了,但仍然没有运气:( 您能分享一下用于将所有视图控制器弹出到根目录的代码吗? 循环所有预设的视图控制器并调用dismissViewControllerAnimated api以上是关于如何以编程方式关闭 UIWebView 的上下文菜单?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS Swift 3 中以编程方式添加 Web 视图时如何在 UIWebView 中获取响应状态代码?