2011-02-09 46 views
1

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

谢谢。

+0

如果是的话,你是否得到答案,那么请帮助我。我使用搜索的JavaScript来突出显示,并允许用户选择多行,以便它成为一个错误的练习章节的唯一。它有效,但有时不行。我有数据库来保存这些亮点,并能够使用搜索JavaScript来突出显示,但我想让用户突出显示,就像在ibook中一样,即使是单个单词。如果您有任何建议,请帮助我。 – Soniya 2012-05-21 06:07:04

回答

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来确定保留您的选择的矩形,然后在文本上覆盖半透明的用户视图。

因此,在您的doNote方法中,加载JavaScript并运行它,请参阅下面的JavaScript以获取您可能想要执行的操作的示例。

NSString *rectString = [webView stringByEvaluatingJavaScriptFromString:rectStringText]; 

以下将得到一个矩形中的文本,但它本质上会比你的文本大:如果你在焦炭10第2行通过炭50第5行强调,它会返回一个矩形即通过突出线条底线炭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+'}}'; 
} 

所以,现在你有一个长方形的字符串,您可以创建一个从的CRect返回的字符串和的UIView到您的网页视图内覆盖。 [请注意,你将不得不弄清楚如何处理缩放和保存这些数据为你的下一个负载]