如何在 UIWebView 中突出显示文本时删除“定义”菜单

Posted

技术标签:

【中文标题】如何在 UIWebView 中突出显示文本时删除“定义”菜单【英文标题】:how to remove "define" menu when text is highlighted in UIWebView 【发布时间】:2012-01-11 19:54:20 【问题描述】:

我试过这样做:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 

   return NO;

但是还是弹出菜单,我也想保留副本,我只想去掉“define”,可以吗?为了澄清我不想删除文本选择的能力,我只是想删除 UIMenuController 中的“定义”选项

【问题讨论】:

为什么要屏蔽用户定义词的能力? 【参考方案1】:

你是否在 canPerformAction:withSender 中返回YES?

请注意,如果您的类对命令返回 NO,则响应者链上的另一个响应者可能仍会返回 YES,从而启用该命令。

【讨论】:

这是一个类似 java 的 Final 关键字在 Objective-C 中派上用场的地方 错了。响应者链跨不同的类(UIView->UIViewController->UIWindow->UIApplication)工作。 “final”关键字对这里没有任何帮助。【参考方案2】:

你需要继承UIWebView,然后

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender 

//    XLOG(@"perform action %@ with sender %@.", NSStringFromSelector(action), sender);
    if ((action == @selector(cut:)) || (action == @selector(copy:)) || (action == @selector(select:)) ||
        (action == @selector(selectAll:)) || (action == @selector(paste:)) || (action == @selector(delete:)))
        return [super canPerformAction:action withSender:sender];

    return NO;

【讨论】:

来自 Apple 的文档:UIWebView 类不应被子类化。

以上是关于如何在 UIWebView 中突出显示文本时删除“定义”菜单的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse Py-dev,深色主题在键入时删除文本突出显示?

如何在文本突出显示期间保留语法突出显示

删除焦点上的蓝色突出显示文本

如何在android中为pdf查看器制作注释,如突出显示、删除线、下划线、绘制、添加文本等?

检测 UIWebView 中的文本亮点

在java中突出显示文本