2012-01-11 1 views

答えて

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()"]); 
} 

が、それは次のようになります。

+0

他のサンプルはどうですか? – adit

+0

ああ、これはiPhone上にあるので、私が試したときにUIUserInterfaceIdiomPadの下で実行されていないときに呼び出されます – adit

+0

これは私に3つのメニューポップオーバー、コピー、定義、定義を与えます – adit

関連する問題