【问题标题】:UIWebView - creating custom context menu?UIWebView - 创建自定义上下文菜单?
【发布时间】:2011-11-12 21:04:49
【问题描述】:

我将 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';"];

没有用。 谢谢。

【问题讨论】:

  • 你的方法被命名为webViewDidLoadFinished:,而不是webViewDidFinishLoad:。这是问题和/或代码中的错字吗?
  • 很抱歉问这个问题,但我认为需要问。您是否设置了UIWebViewdelegate 属性并且确定正在执行代码?
  • 当然。我添加 [webView setDelegate:self]。

标签: iphone css uiwebview contextmenu


【解决方案1】:

您能解释一下为什么要尝试使用所有这些 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';"];
}

【讨论】:

  • 我刚刚注意到,这不适用于最新的 iOS 测试版,而它适用于 iOS3 和 iOS4 ...您使用的是 iOS 测试版吗?
【解决方案2】:

你只需要继承 UIWebView。在您的自定义视图中,只需像这样实现方法 canPerformAction:withSender:

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

当你在视图中长按一个单词时,这只会给你“复制”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多