1

epubファイルをロードするipad/iphone用の電子ブックアプリを開発しています。背景色でテキストを強調表示し、UIView ではなく UIWebView で iBook や Kindle に似たメモを作成する方法を知りたいです。ロングタップでテキストをドラッグして選択できます。しかし、「コピー」オプションしか表示されません。そのメニューにハイライトとメモを追加したいと思います。背景色でテキストをハイライトする方法は?... ドキュメントが UIWebView に読み込まれます。

ありがとうございました。

4

1 に答える 1

1

必要なことは、共有メニューにメモとハイライトのオプションを追加することです。あなたのviewcontroller viewdidloadで(またはあなたのビューが追加された後はいつでも)。以下は、2 つのセレクター メソッドを持つ 2 つのメニュー項目をメニューに追加します。

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 を使用して、選択範囲を保持する rect を決定し、テキストの上に半透明の uiview をオーバーレイすることもできます。

そのため、doNote メソッド内で JavaScript をロードして実行します。以下の JavaScript を参照して、実行したい操作の例を確認してください。

NSString *rectString = [webView stringByEvaluatingJavaScriptFromString:rectStringText];

次の例では、テキストの周囲に四角形が作成されますが、本質的にテキストよりも大きくなります。行 2 の文字 10 から行 5 の文字 50 までを強調表示した場合、文字 0 行 2 から行 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 に答える