Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIWebView-创建自定义上下文菜单?_Iphone_Css_Uiwebview_Contextmenu - Fatal编程技术网

Iphone UIWebView-创建自定义上下文菜单?

Iphone UIWebView-创建自定义上下文菜单?,iphone,css,uiwebview,contextmenu,Iphone,Css,Uiwebview,Contextmenu,我在应用程序中添加了UIWebView控件 为了禁用默认上下文菜单,我实现了webViewDidFinishLoad - (void) webViewDidFinishLoad:(UIWebView *)theWebView { NSString *varMySheet = @"var mySheet = document.styleSheet[0];"; NSString *addCSSRule = @"function addCSSRule(selector, newRule

我在应用程序中添加了UIWebView控件

为了禁用默认上下文菜单,我实现了webViewDidFinishLoad

- (void) webViewDidFinishLoad:(UIWebView *)theWebView {
    NSString *varMySheet = @"var mySheet = document.styleSheet[0];";
    NSString *addCSSRule = @"function addCSSRule(selector, newRule) {"
        "if (mySheet.addRule) {"
        "mySheet.addRule(selector, newRule);"
        "} else {"
        "ruleIndex = mySheet.cssRules.length;"
        "mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex;"
        "}"
        "}";
    ...
    NSString *insertRule = @"addCSSRule('body', '-webkit-touch-callout: none;')";

    [webView stringByEvaluatingJavaScriptFromString:varMySheet];
    [webView stringByEvaluatingJavaScriptFromString:addCSSRule];
    [webView stringByEvaluatingJavaScriptFromString:insertRule];
    ...
}
但webview的上下文菜单并没有消失。谁来帮帮我

我也试过了

[webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"];
它不起作用。
谢谢。

您能解释一下为什么要使用这些javascript吗? 仅仅做以下这些对你来说是不够的

- (void) webViewDidFinishLoad:(UIWebView *) sender {
    // Disable the defaut actionSheet when doing a long press
    [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"];
    [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];
}

您只需要对UIWebView进行子类化。在您的自定义视图中,只需实现方法canPerformAction:Wissender,如下所示:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
  return NO;
}
然后所有菜单项都将消失。如果您只是想显示一些项目,那么应该为指定的项目返回YES

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
  BOOL ret = NO;
  if (action == @selector(copy:)) ret = YES;
  return ret;
}

当您在视图中长按一个单词时,只会显示“复制”。

您的方法名为
webViewDidLoadFinished:
,而不是
webViewDidFinishLoad:
。这是问题和/或代码中的打字错误吗?很抱歉问这个问题,但我认为需要问一下。您是否设置了
UIWebView
委托
属性,是否确定代码正在执行?确定。我添加了[webView setDelegate:self]。我刚刚注意到,这不适用于最新的iOS测试版,而适用于iOS3和iOS4。。。您使用的是iOS测试版吗?