您需要做的是将注释和突出显示选项添加到您的共享菜单中。在您的视图控制器 viewdidload 中(或添加视图后的任何时间)。下面将两个具有两种选择器方法的菜单项添加到您的菜单中。
UIMenuItem *customMenuItem1 = [[UIMenuItem alloc] initWithTitle:@"Highlight" action:@selector(doHighlight:)];
UIMenuItem *customMenuItem2 = [[UIMenuItem alloc] initWithTitle:@"Note" action:@selector(doNote:)];
//[myArray addObject:customMenuItem2];
NSMutableArray *myArray = [[NSMutableArray alloc]initWithObjects:customMenuItem1,customMenuItem2, nil ] ;
[UIMenuController sharedMenuController].menuItems = myArray;
您可能还想使用一些 javascript 来确定包含您的选择的矩形,然后在文本上覆盖一个半透明的 uiview。
因此,在您的 doNote 方法中,加载 javascript 并运行它,请参阅下面的 javascript 示例,了解您可能想要执行的操作。
NSString *rectString = [webView stringByEvaluatingJavaScriptFromString:rectStringText];
以下内容将围绕文本获得一个矩形,尽管它本质上会比您的文本大:如果您在第 2 行的 char 10 到第 5 行的 char 50 突出显示,它将返回一个突出显示 char 0 的矩形第 2 行到第 5 行。
function selectEl(x,y){
document.designMode = "on";
var el = document.elementFromPoint(x, y);
var rect = el.getBoundingClientRect();
var vx = rect.left;
var width = rect.right - vx;
var height = rect.bottom - rect.top;
var vy = rect.top;
var range = document.createRange();
range.selectNodeContents(el);
var sel = document.getSelection();
sel.removeAllRanges();
sel.addRange(range);
document.designMode = "off";
rectString = '{{'+vx+','+vy+'},{'+width+','+height+'}}';
}
所以,既然你有一个矩形字符串,你可以从返回的字符串和 uiview 创建一个 CRect 以覆盖在你的 webview 中。 [注意,您必须弄清楚如何处理缩放和保存此数据以供下次加载]