如何以编程方式关闭 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

上述尝试均未成功实现这一目标。 谁能告诉我如何以编程方式关闭UIWebViewcontextual 菜单?

提前感谢任何帮助。

【问题讨论】:

【参考方案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上滚动UIWebView

以编程方式处理 uiwebview 中的文本字段

在 iOS Swift 3 中以编程方式添加 Web 视图时如何在 UIWebView 中获取响应状态代码?

如何在不编码窗口状态的情况下以编程方式终止 NSApp?

使用没有alertView的UIWebView在iOS中以编程方式进行电话呼叫

以编程方式将视图添加到 UIWebView (iPhone/iPad) 的每个页面