UIWebViewでテキストを強調表示すると、通常、コピー、貼り付け、定義..などが表示されます。どのように私はこれを傍受して私がコピーを選択するときに私は他の方法を呼び出す/何か他のことをすることができます。これは可能ですか?インターセプトコピー、貼り付け、UIWebViewのポップオーバーを定義する
4
A
答えて
6
あなたは、単に-copyオーバーライドすることができます。
- (void)copy:(id)sender
{
// Do something else here
return [super copy:sender];
}
編集をあなたのコメントに答えること。
定義がプライベートなので、少し複雑です。ただし、独自のメソッドを実装することもできます。 UIMenuControllerを目的の項目で設定します。
UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"Copy"
action:@selector(myCopy:)];
UIMenuItem *defineItem = [[UIMenuItem alloc] initWithTitle:@"Define"
action:@selector(myDefine:)];
[[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:defineItem, copyItem, nil]];
[defineItem release];
[copyItem release];
次に、これらのメソッドを実装します。定義については
、それは第一に、あなたはUIReferenceLibraryControllerが-canPerformActionオーバーライドすることによって、定義を持っているかどうかを確認する必要があります。..方法がより複雑だ:withSender:
ここのUIWebViewのカテゴリです-selectedText- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(myDefine:)) {
// Make sure we are on iOS5.x
if (NSClassFromString(@"UIReferenceLibraryViewController")) {
return [UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:[webView selectedText]];
}
}
// Implement other custom actions here
return NO;
}
を:
- (NSString *)selectedText {
return [self stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString()"];
}
次にあなたがmyDefineを実装する必要があります。
- (void)myDefine:(UIMenuController *)menuController
{
CGRect selectedWordFrame = [webView rectForSelectedText];
UIReferenceLibraryViewController *dict = [[UIReferenceLibraryViewController alloc] initWithTerm:[webView selectedText]];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:dict];
[popover presentPopoverFromRect:selectedWordFrame
inView:webView
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
[popover setDelegate:self];
[dict release];
}
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
[popoverController release];
}
あなたのコメントを再度編集するには編集する
-correctForSelectedTextは、UIWebViewの別のカスタムカテゴリです。
function getRectForSelectedWord() {
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var rect = range.getBoundingClientRect();
return "{{" + rect.left + "," + rect.top + "}, {" + rect.width + "," + rect.height + "}}";
}
チェックthis pageのUIWebViewにJavaScriptを注入する方法を学ぶために:それはあなたがCGRectFromString()を使用して変換できるという文字列を返すJavaScriptを呼び出して何
- (CGRect)rectForSelectedText {
return CGRectFromString([self stringByEvaluatingJavaScriptFromString:@"getRectForSelectedWord()"]);
}
が、それは次のようになります。
関連する問題
- 1. ユーザー定義の範囲をコピーして貼り付けます
- 2. UIWebView/websiteにテキストを貼り付けます
- 3. Visual Studioコードの貼り付けと貼り付けのコピー
- 4. Javascript - 貼り付けイベントの前に貼り付けデータを取得する
- 5. 貼り付け値
- 6. 指定された値を持つすべての行を列に貼り付けて貼り付けます
- 7. 数値を貼り付けて数値を貼り付けます
- 8. GWTのイベント貼り付け
- 9. テキストのコピー/貼り付け
- 10. 特定の回数だけコピーして貼り付けます
- 11. アトムエディタでショートカットを使用してユーザー定義テキストを貼り付け
- 12. コピーコピー貼り付けjQuery/Javascript
- 13. コピー貼り付けマクロ
- 14. jQueryファンシーボックススピニングローダーに貼り付け
- 15. (例:コピー、貼り付け...)
- 16. アドバンスフィルタから貼り付け
- 17. 貼り付けVBA配列
- 18. コンソールにxml貼り付け
- 19. pygame.draw.rect()に貼り付け
- 20. VBAコピー貼り付け
- 21. コピー貼り付けfrom userform
- 22. jquery貼り付けディスプレイ:ブロック
- 23. 貼り付けデータUP
- 24. 貼り付け方法は
- 25. 式の値を貼り付けます。
- 26. 行の特定の値をコピーして貼り付ける
- 27. MVCを貼り付けるHTMLを
- 28. マクロを特定のセルに貼り付ける方法
- 29. boxed navbarを貼り付けるには
- 30. Silverlightに画像を貼り付ける
サンプル:http://goo.gl/lLJpL – elp