在UIwebview中突出显示并记下

时间:2011-02-09 18:35:34

标签: objective-c xcode ios4 uiwebview epub

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

谢谢。

1 个答案:

答案 0 :(得分:1)

您需要做的是在共享菜单中添加注释和突出显示选项。在viewcontroller 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行的第10行至第5行的字符50处突出显示,它将返回一个突出显示字符0的矩形第2行到第15行。

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+'}}';
}

因此,现在你有一个矩形字符串,你可以从返回的字符串创建一个CRect,并在你的webview中创建uiview叠加。 [注意,您必须弄清楚如何处理缩放并为下次加载保存此数据]