UIWebView - создание пользовательского контекстного меню? - PullRequest
4 голосов
/ 08 сентября 2011

Я добавил элемент управления 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 stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"];

Это не сработало.Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Вам просто нужно создать подкласс 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;
}

Это дает вам только "копию", когда вы долго нажимаете слово в представлении.

0 голосов
/ 08 сентября 2011

Не могли бы вы объяснить, почему вы пытаетесь делать со всем этим 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';"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...