iphone – 拦截复制,粘贴,在UIWebView中定义d出窗口

iphone – 拦截复制,粘贴,在UIWebView中定义d出窗口,第1张

概述当我们在UIWebView中突出显示文本时,通常会出现复制,粘贴,定义等.我如何拦截这个,以便当我选择复制时,我会调用其他方法/做其他事情.这可能吗? 你可以简单地覆盖-copy: - (void)copy:(id)sender{ // Do something else here return [super copy:sender];} 编辑以回答您的评论. 定义有点棘手,因 当我们在UIWebVIEw中突出显示文本时,通常会出现复制,粘贴,定义等.我如何拦截这个,以便当我选择复制时,我会调用其他方法/做其他事情.这可能吗?解决方法 你可以简单地覆盖-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];

然后你实现这些方法.

至于define,它的方式会更复杂.首先,你需要通过重写-canPerformAction来检查UIReferencelibraryController是否有定义:withSender:

- (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;}

-selectedText在这里是UIWebVIEw上的一个类别:

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

编辑以再次回答您的评论

-rectForSelectedText是UIWebVIEw上的另一个自定义类别.

- (CGRect)rectForSelectedText {    return CGRectFromString([self stringByEvaluatingJavaScriptFromString:@"getRectForSelecteDWord()"]);}

它的作用是调用一个返回你可以使用CGRectFromString()转换的字符串的JavaScript,它看起来像这样:

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以了解如何将JavaScript注入UIWebVIEw.

总结

以上是内存溢出为你收集整理的iphone – 拦截复制,粘贴,在UIWebView中定义d出窗口全部内容,希望文章能够帮你解决iphone – 拦截复制,粘贴,在UIWebView中定义d出窗口所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1080632.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存