无法在UIWebView中禁用复制/定义选择菜单

时间:2013-08-23 07:56:30

标签: iphone ios cocoa-touch

我知道这是最常见的常见问题解答之一。事实上,我找到了以下链接:

Disabling user selection in UIWebView

但我仍然无法从菜单选择中删除副本和定义项目。我只想在菜单中显示“快速”和“另一个”项目。任何人都能告诉我一个方法吗?感谢您的时间。这是我的代码和截图。

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{


    if (action == @selector(quick:)) {

        NSLog(@"my quick view");
        return YES;

    }else if (action == @selector(another:)){

        NSLog(@"my another view");
        return YES;

    }else if (action == @selector(copy:) ||
        action == @selector(paste:)||
        action == @selector(cut:) ||
        action == @selector(define:) )
    {
        return NO;
    }

    return [super canPerformAction:action withSender:sender];

}

enter image description here

2 个答案:

答案 0 :(得分:1)

首先,要解决您的问题,请将define:更改为_define:以删除相关选项。

但是,_define:是Apple私有API中的一项功能(因为_),如果您想在App Store上发布它们,则无法在产品中使用它们。

但是,就copy:选项而言,您的canPerformAction应将其删除。

仅供参考,我在这里附上一个私有API函数列表,canPerformAction将调用它们:

_promptForReplace:

_showTextStyleOptions:

_define:

_addShortcut:

_accessibilitySpeak:

_accessibilitySpeakLanguageSelection:

_accessibilityPauseSpeaking:

因此,如果要删除上述任何功能,则必须创建自定义菜单栏。以下视频应该可以帮助您解决问题:

http://www.youtube.com/watch?v=SB7w8JEJSrc

好运!

修改

以下是您的解决方案:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{


if (action == @selector(quick:)) {

    NSLog(@"my quick view");
    return YES;

}else if (action == @selector(another:)){

    NSLog(@"my another view");
    return YES;

}

return NO;

}

答案 1 :(得分:0)

尝试在这种方法中使用这个......

-(void)webViewDidFinishLoad:(UIWebView *)theWebView
{
    [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none'; document.body.style.KhtmlUserSelect='none'"];
}

我希望它可以帮助你...