1

我正在为加载 epub 文件的 ipad/iphone 开发一个电子书应用程序。我想知道如何用背景颜色突出显示文本,并在 UIWebView 而不是 UIView 中做类似于 iBook 或 Kindle 的笔记。我可以通过长按来拖动选择文本。但我只能看到“复制”选项。我想在该菜单中添加突出显示并添加注释。如何使用背景颜色突出显示文本?...我的文档在 UIWebView 中加载。

谢谢你。

4

1 回答 1

1

您需要做的是将注释和突出显示选项添加到共享菜单中。在您的视图控制器 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 中。[注意,您必须弄清楚如何处理缩放并保存此数据以供下次加载]

于 2013-01-21T15:48:58.103 回答